对于每个组应用一个函数和 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
函数应用于一组 a
和 y
。与输入相比,输出可能有不同的 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)]
我正在使用 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
函数应用于一组 a
和 y
。与输入相比,输出可能有不同的 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)]