如何根据r中的多个列折叠多行?

时间:2017-05-09 22:25:56

标签: r sum aggregate

所以基本上我有一个看起来像这样的数据框:

Community Pop_Total Median_Age Under_5 5-9 10-14 15-19 20-24 
Akutan city   NA    NA         NA      NA  NA    NA    71
Alcan Border  NA    NA         2       NA  NA    NA    NA               
Alcan Border  NA    NA         NA      NA  NA    2     NA            
Alcan Border  NA    NA         NA      NA  5     NA    NA
Ambler City   224   NA         NA      NA  NA    NA    NA
Ambler City   NA    NA         NA      17  NA    NA    NA

是否有一种基于多列数据组合多行的简单方法?我已经看过一些脚本,说你可以根据一个或两个数据列在一个列中组合一个重复变量但是我需要做更大规模的(我有~400行有重复和~30列(和每列)有一个大名字。)

理想情况下,它看起来像:

Community Pop_Total Median_Age Under_5 5-9 10-14 15-19 20-24 
Akutan city   NA    NA         NA      NA  NA    NA    71              
Alcan Border  NA    NA         2       NA  5     2     NA            
Ambler City   224   NA         NA      17  NA    NA    NA

我是R的新人。谢谢你!

编辑 - 我使用了以下代码,但是当我崩溃时,很多列数据(第一个重复的社区名称之后的行中的数据消失了:10-14和15-19的Alcon边界值变为NA)丢失了它。想法?

library(dplyr)
census8 <- census7 %>%
  group_by(Community) %>%
  summarise_each(funs(sum))

1 个答案:

答案 0 :(得分:1)

要按照您希望的方式将NA放在那里,您可以使用data.table

library(data.table)
setDT(df)[,lapply(.SD, function(x) ifelse(all(is.na(x)), NA_integer_, sum(x, na.rm = T))), 
    by = Community]

#      Community Pop_Total Median_Age Under_5 5-9 10-14 15-19 20-24
#1:  Akutan_city        NA         NA      NA  NA    NA    NA    71
#2: Alcan_Border        NA         NA       2  NA     5     2    NA
#3:  Ambler_City       224         NA      NA  17    NA    NA    NA