我有一个与此相关的问题,我之前曾问过:从 foreach 循环赋值 https://stackoverflow.com/questions/18767016/assignment-of-a-value-from-a-foreach-loop/18767725?noredirect=1#18767725。我发现,尽管友好的用户为我提供的解决方案指向了正确的方向,但它们并没有解决我的实际问题。这里是示例数据集:
td <- data.table(date=c(rep(1,10),rep(2,10)),var=c(rep(1,4),2,rep(1,5)),id=rep(1:10,2))
它与以前相同,但它更好地反映了我的真实数据我想要用文字做什么:对于每个 id,我希望获得特定时期内所有其他 id 的平均值(例如,平均值(td [date ==“2004”) -01-01" & id!=1]$var) 但适用于所有时期和所有 id)。所以这是某种嵌套操作。我尝试过类似的事情:
td[,.SD[,mean(.SD$var[-.I]),by=id],by=date]
但这并没有给出正确的结果。
Update:
Josh very intelligently suggested to use `.BY ` instead of `.GRP`
td[, td[!.BY, mean(var), by=date], by=id]
原答案:
如果您键入id
您可以使用.GRP
通过以下方式:
setkey(td, id)
## grab all the unique IDs. Only necessary if not all ids are
## represented in all dates
uid <- unique(td$id)
td[, td[!.(uid[.GRP]), mean(var), by=date] , by=id]
id date V1
1: 1 1 1.111111
2: 1 2 1.111111
3: 2 1 1.111111
4: 2 2 1.111111
5: 3 1 1.111111
6: 3 2 1.111111
7: 4 1 1.111111
8: 4 2 1.111111
9: 5 1 1.000000
10: 5 2 1.000000
11: 6 1 1.111111
12: 6 2 1.111111
13: 7 1 1.111111
14: 7 2 1.111111
15: 8 1 1.111111
16: 8 2 1.111111
17: 9 1 1.111111
18: 9 2 1.111111
19: 10 1 1.111111
20: 10 2 1.111111
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)