lappy在多个数据帧中聚合列R
我在R中的列表中有几个数据帧。我想总结一下每个DF中都有条目。我正在尝试进入lapply,所以这将是我的首选方式,但如果有更好的解决方案,我很乐意知道它和原因 我的样本数据:lappy在多个数据帧中聚合列R,r,aggregate,lapply,R,Aggregate,Lapply,我在R中的列表中有几个数据帧。我想总结一下每个DF中都有条目。我正在尝试进入lapply,所以这将是我的首选方式,但如果有更好的解决方案,我很乐意知道它和原因 我的样本数据: df1 <- data.frame(Count = c(1,2,3), ID = c("A","A","C")) df2 <- data.frame(Count = c(1,1,2), ID = c("C","B","C")) dfList <- list(df1,df2) > head(dfLi
df1 <- data.frame(Count = c(1,2,3), ID = c("A","A","C"))
df2 <- data.frame(Count = c(1,1,2), ID = c("C","B","C"))
dfList <- list(df1,df2)
> head(dfList)
[[1]]
Count ID
1 1 A
2 2 A
3 3 C
[[2]]
Count ID
1 1 C
2 1 B
3 2 C
我想这就是你需要的
library(dplyr)
lapply(dfList,function(x) ddply(x,.(ID),summarize,Count=sum(Count)))
tidyverse的一个选项是
这是第三种选择
lapply(dfList, function(x) aggregate(. ~ ID, data = x, FUN = "sum"))
#[[1]]
# ID Count
#1 A 3
#2 C 3
#
#[[2]]
#ID Count
#1 B 1
#2 C 3
我认为你把它复杂化了。试试这个
dfList_agg<-lapply(dfList, function(i) {
aggregate(i[,1], by=list(i[,2]), FUN=sum)
})
dflist_agg
[[1]]
Group.1 x
1 A 3
2 C 3
[[2]]
Group.1 x
1 B 1
2 C 3
i[,1]表达式做什么?我的i[[1:lengthi]][1L]是否有差异?显然是的,因为您的代码可以工作;它从数据帧i中选择列1作为dfList的元素之一。在表达式中,1:lengthi是多余的,因为它只是所有列,尽管使用[[注释]您将df视为列列表。我认为您的表达式也应该选择I的第一列,但它的结构可能稍有不同。我认为主要的问题是by表达式不起作用-主要是因为您使用的是名称长度1,而不是ID值的实际列。
library(tidyverse)
map(dfList, ~ .x %>%
group_by(ID) %>%
summarise(Count = sum(Count)) %>%
select(names(.x)))
#[[1]]
# A tibble: 2 x 2
# Count ID
# <dbl> <fctr>
#1 3.00 A
#2 3.00 C
#[[2]]
# A tibble: 2 x 2
# Count ID
# <dbl> <fctr>
#1 1.00 B
#2 3.00 C
lapply(dfList, function(x) aggregate(. ~ ID, data = x, FUN = "sum"))
#[[1]]
# ID Count
#1 A 3
#2 C 3
#
#[[2]]
#ID Count
#1 B 1
#2 C 3
dfList_agg<-lapply(dfList, function(i) {
aggregate(i[,1], by=list(i[,2]), FUN=sum)
})
dflist_agg
[[1]]
Group.1 x
1 A 3
2 C 3
[[2]]
Group.1 x
1 B 1
2 C 3