将函数应用于不包括按值嵌套的数据表子集

2024-04-16

我有一个与此相关的问题,我之前曾问过:从 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(使用前将#替换为@)

将函数应用于不包括按值嵌套的数据表子集 的相关文章

随机推荐