这是我关于 SO 的第一篇文章,所以如果有人在其他地方问过这个问题,我深表歉意,但我似乎无法弄清楚如何表达我的问题,所以很难看。
我遇到的问题是我正在使用一个包含变量的数据框,该变量是一个称为 PrimaryType 的因子。这个变量大约有 15 个级别,我想从中创建新的二进制变量,以便我可以在各个级别上执行统计分析。这是我正在使用的代码:
df <- read.csv('Data/ChiCrime11_13.txt', header=T, sep='\t')
for (i in 1:nrow(df)){
for (crimes in levels(df$PrimaryType)){
if (df$PrimaryType == crimes) {
df[crimes] <- 1
}
else{
df[crimes] <- 0
}
}
}
我遇到的问题是我的数据框超过 900,000 个观察值,很明显这个过程将花费大量时间来运行(我相信 900,000^15 次迭代)。这让我想到了我的问题:有没有办法让它更有效率?
如有任何想法/建议,我们将不胜感激。谢谢!
最佳答案
这样的事情可能会更快
for (crimes in levels(df$PrimaryType)){
df[,crimes] <- ifelse (df$PrimaryType == crimes, 1, 0)
}
如果您只用零创建所有变量然后只分配这些变量,它会更快。
df[, levels(df$PrimaryType)] <- 0
for (crimes in levels(df$PrimaryType)){
df[df$PrimaryType == crimes,crimes] <- 1
}
下次遇到类似问题时,您应该寻找有关 R 中优化和矢量运算的问题..
关于r - R 中嵌套 For/If 循环的算法效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18863090/