R聚合多行
我的问题似乎是一个非常常见的问题,但我在互联网上找到的解决方案不起作用 我想在R中聚合数据帧中的行。 以下是我的数据框(df)的结构,它是一个引文表:R聚合多行,r,row,aggregate,R,Row,Aggregate,我的问题似乎是一个非常常见的问题,但我在互联网上找到的解决方案不起作用 我想在R中聚合数据帧中的行。 以下是我的数据框(df)的结构,它是一个引文表: Autors Lannoy_2016 Ramadier_2014 Lord_2009 Ortar_2008 Burgess E 1 NA NA NA Burgess E 1 NA NA
Autors Lannoy_2016 Ramadier_2014 Lord_2009 Ortar_2008
Burgess E 1 NA NA NA
Burgess E 1 NA NA NA
Burgess E 1 NA NA NA
Burgess E 1 NA NA NA
Kaufmann V NA 1 NA NA
Kaufmann V NA NA 1 NA
Kaufmann V NA NA NA 1
Orfeuil P 1 NA NA NA
Orfeuil P NA 1 NA NA
Sorokin P NA NA NA 1
这就是我想要的:
Autors Lannoy_2016 Ramadier_2014 Lord_2009 Ortar_2008
Burgess E 4 NA NA NA
Kaufmann V NA 1 1 1
Orfeuil P 1 1 NA NA
Sorokin P NA NA NA 1
我已经尝试过这些解决方案,但不起作用:
ddply(df,"Autors", numcolwise(sum))
及
它可以很好地聚合行,但值(1个值的总和)绝对不正确!我不明白为什么
你有什么想法吗
多谢各位
Joël这可能是因为没有使用
na.rm
library(dplyr)
df %>%
group_by(Autors) %>%
summarize_all(sum, na.rm = TRUE)
如果同时加载了plyr
和dplyr
,summary
将被屏蔽,但对summary\u all
表示怀疑,因为它是dplyr
函数
根据预期输出,使用na.rm=TRUE
,它将删除所有na
s,如果存在只有na
s的情况,则返回0。为了避免这种情况,我们可以有一个条件
df %>%
group_by(Autors) %>%
summarize_all(funs(if(all(is.na(.))) NA else sum(., na.rm = TRUE)))
# A tibble: 4 x 5
# Autors Lannoy_2016 Ramadier_2014 Lord_2009 Ortar_2008
# <chr> <int> <int> <int> <int>
#1 Burgess E 4 NA NA NA
#2 Kaufmann V NA 1 1 1
#3 Orfeuil P 1 1 NA NA
#4 Sorokin P NA NA NA 1
df%>%
分组依据(自动)%>%
汇总所有(funs(if(all)(is.na())na else sum(,na.rm=TRUE)))
#一个tibble:4x5
#Autors Lannoy_2016拉马迪耶_2014洛德_2009 Ortar_2008
#
#1伯吉斯E 4纳纳纳纳
#2考夫曼诉纳1
#3或Feuil P 1 NA NA
#4索罗金P NA 1
数据
df您也可以使用rowsum()进行求和,尽管它(可能是误导性的)为输出中只有NA作为输入的单元格提供0而不是NA的和
rowsum(df[,c(2:5)],df$Autors,na.rm=T)
给出:
Lannoy_2016 Ramadier_2014 Lord_2009 Ortar_2008
Burgess E 4 0 0 0
Kaufmann V 0 1 1 1
Orfeuil P 1 1 0 0
Sorokin P 0 0 0 1
非常感谢,它正在工作,问题当然是NA!
rowsum(df[,c(2:5)],df$Autors,na.rm=T)
Lannoy_2016 Ramadier_2014 Lord_2009 Ortar_2008
Burgess E 4 0 0 0
Kaufmann V 0 1 1 1
Orfeuil P 1 1 0 0
Sorokin P 0 0 0 1