R聚合多行

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

我的问题似乎是一个非常常见的问题,但我在互联网上找到的解决方案不起作用

我想在R中聚合数据帧中的行。 以下是我的数据框(df)的结构,它是一个引文表:

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