r - R 中嵌套 For/If 循环的算法效率

标签 r performance algorithm if-statement for-loop

这是我关于 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/

相关文章:

python - 在 Python 中实现跳转搜索的结果不正确

r - 如何将向量分成两列以创建用于随机分配的有序对

r - 创建一个由 0 和 1 组成的矩阵,这样每一行只有一个 1,每列至少有两个 1

sql-server - 如何在 R 中连接到 SQL Server 数据库

c# - 调试与发布性能

c++ - 为什么反复调用clock_gettime时会看到400倍的异常时间?

r - 使用 R 中的 ggplot2.zoo 将线图添加到带有动物园对象的现有绘图中

java - 哪个 "if"构造更快 - 语句或三元运算符?

c# - 如何在遍历树结构时匹配路径

algorithm - 寻找前向算法的用途