如何使用汇总和分组来在r中创建汇总表?

时间:2017-10-04 17:40:01

标签: r dataframe group-by dplyr summary

所以我有以下数据集(这是一个小样本/示例,它的原始内容是7k行,30列,超过70年):

Year,Location,Population Total, Median Age, Household Total
2000, Adak, 220, 45, 67
2000, Akiachak, 567, NA, 98
2000, Rainfall, 2, NA, 11
1990, Adak, NA, 33, 56
1990, Akiachak, 456, NA, 446
1990, Tioga, 446, NA, NA

我想创建一个汇总表,用于指示每个变量按位置可用的数据年数。所以这样的事情会起作用(对于之前的小例子):

Location,Population Total, Median Age, Household Total
Adak,1,2,2
Akiachak,2,0,2
Rainfall,1,0,1
Tioga,1,0,0

我是R的新手,并没有将这两个命令一起使用,所以我不确定语法。任何帮助都是美妙的或替代品。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

x %>%
  group_by(Location) %>%
  summarise(count_years = n(), 
            count_pop_total = sum(!is.na(Population_Total)),
            count_median_age = sum(!is.na(Median_Age)),
            count_house_total = sum(!is.na(Household_Total)))

您可以使用您想要执行的任何操作替换平均值。您应该查看dplyr vignette以获得更一般的解决方案。

答案 1 :(得分:1)

来自summarize_all的{​​{1}}的解决方案:

dplyr

或者您可以使用library(dplyr) df %>% group_by(Location) %>% summarize_all(funs(sum(!is.na(.)))) %>% select(-Year)

summarize_at

<强>结果:

df %>%
  group_by(Location) %>%
  summarize_at(vars(-Year), funs(sum(!is.na(.))))

数据:

# A tibble: 4 x 4
   Location PopulationTotal MedianAge HouseholdTotal
      <chr>           <int>     <int>          <int>
1      Adak               1         2              2
2  Akiachak               2         0              2
3  Rainfall               1         0              1
4     Tioga               1         0              0