我试图摆脱 R 脚本中的所有 for 循环,以加快代码的运行时间。
我有一个像这样的 for 循环:
for(i in 1:x){
pip$FAIL_COUNT[i] <- sum(dat$PIPE_ID == pip$ID[i])
}
我有一个 ID 向量 (
pip$ID
),它有 250k 条记录,只有唯一值。我有第二个与失败实例 (
dat$PIPE_ID
) 相关的 ID 向量,它有 12k 条记录,并且包含重复。并非
pip$ID
的每个值都用 dat$PIPE_ID
表示,但 dat$PIPE_ID
的每个值都用 pip$ID
表示。我要计算的是第三个向量
pip$FAIL_COUNT
,它记录 pip$ID
中的每个值在 dat$PIPE_ID
中出现的次数,可能是 0 或更多的整数。例如:
pip$ID <- c(123, 234, 345, 456, 567, 678, 789, 890)
dat$PIPE_ID <- c(123, 123, 234, 789, 345, 123)
#calculation
pip$FAIL_COUNT
[3, 1, 1, 0, 0, 0, 1, 0]
上面的 for 循环完美地实现了这一点。但它很慢。
有没有办法在不使用 for 循环的情况下实现这一目标?
最佳答案
在 table
上使用 factor
是一种方法。我忽略了数据帧位,因为我们没有其余的数据(如果没有首先定义数据帧,您的代码将不会按编写的方式运行)。
ID <- c(123, 234, 345, 456, 567, 678, 789, 890)
PIPE_ID <- c(123, 123, 234, 789, 345, 123)
table(factor(PIPE_ID, levels = ID))
# 123 234 345 456 567 678 789 890
# 3 1 1 0 0 0 1 0
您可以将结果转换为
numeric
并轻松分配:FAIL_COUNT = as.numeric(table(factor(PIPE_ID, levels = ID)))
关于r - (R统计包)对于向量中的每个值,统计该值在不同向量中出现的次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41626040/