【发布时间】:2021-06-19 09:35:24
【问题描述】:
我有一个我认为很简单的问题,但我想不通!我有一个包含多列的数据框。这是一个通用示例:
colony = c('29683','25077','28695','4865','19858','2235','1948','1849','2370','23196')
age = c(21,23,4,25,7,4,12,14,9,7)
activity = c(19,45,78,33,2,49,22,21,112,61)
test.df = data.frame(colony,age,activity)
test.df
我希望 R 根据数据框中的菌落年龄计算平均活动。具体来说,我希望它只计算与该行中的菌落年龄相同或更老的菌落的平均活动,不包括该行中菌落的活动。例如,菌落 29683 是 21 岁。对于我的这行数据,我想要 21 岁以上的菌落的平均活动。这将包括殖民地 25077 和殖民地 4865;平均值为 (45+33)/2 = 39。我希望 R 通过识别当前行中菌落的年龄来对数据的每一行执行此操作,然后识别比该菌落更老的菌落,然后平均这些菌落的活动。
我尝试在 R 的 for 循环中执行此操作。这是我使用的代码:
test.avg = vector("numeric",nrow(test.df))`
for (i in 1:10){
test.avg[i] <- mean(subset(test.df$activity,test.df$age >= age[i])[-i])
}
R 返回一个值列表,其中一半是正确的,另一半不是(我什至不确定它是如何计算出这些不正确的数字的......)。与它们在数据框中的列出方式相比,正确的数字也是无序的。它显然能够为循环的某些迭代做正确的事情,但不是全部。如果有人可以帮助我编写代码,我将不胜感激!
【问题讨论】: