我有一个收件箱,它 for each ID指示邻近ID.我的第二个收件箱包含每个唯一ID的计数值.
目标是创建一个变量,对于每个ID,该变量是相邻ID计数的总和;如果邻居V1的计数是10,V2的计数是40,V3的计数是120,那么该ID的期望输出是170.
我在下面创建了一个脚本,可以为我做到这一点,但它非常慢.由于我的实际数据集很大(既长又宽),所以我想优化此转换的速度.还有其他办法吗?
row_sum <- function(row) {
row_values <- unlist(lapply(row, function(ID) df_counts$count[df_counts$ID == ID]))
sum(row_values, na.rm=TRUE)
}
set.seed(42) ## for sake of reproducibility
#mockup data to reproduce problem
df1 <- data.frame(ID=sort(sample(1:100)), V1_id=sample(1:100),
V2_id=sample(1:100), V3_id=sample(1:100))
df_counts <- data.frame(ID=sort(sample(1:100)),
count=runif(100, min=0, max=999))
sum_of_counts <- as.data.frame(apply(df1, 1, row_sum))
请注意,情况并非如此.
ID | sum_of_counts |
---|---|
1 | 920 |
2 | 940 |