【发布时间】:2022-01-19 22:30:47
【问题描述】:
假设我有以下数据框“df”:
names <- c("Bob","Mary","Ben","Lauren")
number <- c(1:4)
age <- c(20,33,34,45)
df <- data.frame(names,number,age)
假设我有另一个包含数千人的数据框(“df2”),我想将其他数据框中的人的收入相加,这些人在“df”中每行具有给定的姓名、人数和年龄。也就是说,对于“df”的每一行“i”,我想创建第四列“TotalIncome”,它是数据框“df2”中具有给定姓名、年龄和数字的所有人的收入总和。换句话说,对于每一行“i”:
df$TotalIncome[i] <- sum(
df2$Income[df2$Name == df1$Name[i] &
df2$Numbers == df1$Numbers[i] &
df2$Age == df1$Age[i]], na.rm=TRUE)
有没有一种方法可以做到这一点,而不必为每一行“i”在 for 循环中迭代并执行上述代码?有没有办法使用 apply() 来计算整个向量,而不是单独迭代每一行?我正在使用的实际数据集非常庞大,并且迭代需要相当长的时间,我希望在 R 中有更有效的方法来做到这一点。
谢谢!
【问题讨论】:
-
是的。首先,您需要将第二帧合并/加入到第一帧(ref1,ref2),然后总结。无需迭代。如果您有
df2的样本,我们可能会提供帮助。 (即使使用df2,也可能是前两个裁判的欺骗,加上summarize by group。)
标签: r dataframe for-loop apply