对于每个组应用一个函数和 return R 中不同维度的对象

For each group apply a function and return an object of different dimension in R

我正在使用 R。我有一个 data.frame 看起来像这样:

a <- c(1,1,1,2,2,2)
b <- c(10,20,30,40,50,60)
y <- c(2000, 2000, 2001,2001,2002, 2002)
c <- cbind(b,a,y)
colnames(c) <- c("b", "a", "y")

我想做的就是将 sum 函数应用于一组 ay。与输入相比,输出可能有不同的 dim

我希望得到以下结果:

aa <- c(1,1,2,2)
yy <- c(2000,2001,2001,2002)
bb <- c(30,30,40,110)
result <- cbind(bb,aa,yy)

我尝试了以下但收效甚微:

as_tibble(c) %>% group_by(a, y) %>% mutate(tapply(, 2, FUN = sum(b)))

dplyr 之外还有任何提示吗?。非常感谢。

我想你想要以下内容:

library(dplyr)

c %>% 
  as.data.frame() %>%
  group_by(y, a) %>%
  summarise_all(~sum(.))

你可以用 base R 获得相同的结果:

aggregate(b ~ y + a, data = as.data.frame(c), sum)

使用data.table

library(data.table)
as.data.table(c)[, lapply(.SD, sum), .(y, a)]