gpt4 book ai didi

r - (R 统计包)对于向量中的每个值,计算该值在不同向量中出现的次数

转载 作者:行者123 更新时间:2023-12-01 12:24:03 25 4
gpt4 key购买 nike

我正试图摆脱我的 R 脚本中的所有 for 循环,以加快我的代码的运行时间。

我有一个这样的 for 循环:

for(i in 1:x){
pip$FAIL_COUNT[i] <- sum(dat$PIPE_ID == pip$ID[i])
}

我有一个 ID 向量 (pip$ID),它有 250k 条记录,只有唯一值。我有第二个与失败实例相关的 ID 向量 (dat$PIPE_ID),它有 12k 条记录,并且包含重复。
并非 pip$ID 的每个值都在 dat$PIPE_ID 中表示,但是 dat$PIPE_ID 的每个值都在 pip$ 中表示身份证.

我要计算的是第三个向量,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 循环来实现这一点吗?

最佳答案

factor 上使用 table 是一种方法。我忽略了数据帧位,因为我们没有其余数据(如果不首先定义数据帧,您的代码将无法按编写的方式运行)。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com