使用lapply和ddply函数

Met*_*ics 1 r apply

我正在尝试将ddply用于我的示例数据(调用Z),如下所示:

id    y
1001  10
1001  11
1200  12
2001  10
2030  12
2100  32
3100  10
3190  13
4100  45
5100  67
5670  56
...
10001  54
10345  45
11234  32
and so on
Run Code Online (Sandbox Code Playgroud)

我的目的是找到以1开头的id的总和(ie1001,1200,..),2(2100),3(3100,3190),4,... 10,11,... 65 .例如,对于以1开头的id,总和为10 + 11 + 12 = 33,对于以2开头的id,它为32.

我想使用apply函数,如下所示:

>s <- split(z,z$id)
>lapply(s, function(x) colSums(x[, c("y")]))
Run Code Online (Sandbox Code Playgroud)

但是,这给了我每个唯一ID的总和,而不是我正在寻找的那个.任何有关这方面的建议都将受到高度赞赏.

mne*_*nel 5

这是一个用于执行整数除法的data.table解决方案%/%(返回数千)

library(data.table)
DT <- data.table(z)

x <- DT[,list(sum_y = sum(y)), by = list(id = id %/% 1000)]
x
   id sum_y
1:  1    33
2:  2    54
3:  3    23
4:  4    45
5:  5   123
6: 10    99
Run Code Online (Sandbox Code Playgroud)

你可以做类似的 ddply

ddply(z, .(id = id %/% 1000 ), summarize, sum_y = sum(y))
  id sum_y
1  1    33
2  2    54
3  3    23
4  4    45
5  5   123
6 10    99
Run Code Online (Sandbox Code Playgroud)