总结r中的数据帧

时间:2016-12-19 17:09:24

标签: r

我需要帮助分组和汇总数据框。我已经看了很多可能的答案,但我还没有发现任何可以解决问题的方法。

我有一个类似于以下内容的数据框:

structure(list(Country = structure(c(3L, 2L, 1L, 3L, 3L, 2L), 
                                   .Label = c("CA", "MX", "US"), class = "factor"), 
               var1 = c(1L, 1L, 0L, 1L, 0L, 1L), 
               var2 = c(1L, 1L, 1L, 1L, 1L, 0L)), 
          .Names = c("Country", "var1", "var2"), class = "data.frame", 
          row.names = c(NA, -6L))

Country var1 var2
     US    1    1
     MX    1    1
     CA    0    1
     US    1    1
     US    0    1
     MX    1    0

我需要按国家/地区汇总数据并提供一些统计数据。我需要国家的总行数和每个变量的总和。例如:

Country Frequency Sum.var1 Sum.var2
     US         3        2        3
     MX         2        2        1
     CA         1        0        1

2 个答案:

答案 0 :(得分:1)

使用dplyr

df <- df %>% group_by(Country) %>%
    summarise(Frequency=n(), Sum_var1=sum(var1), Sum_var2=sum(var2))

答案 1 :(得分:1)

聚合函数可以为您提供所需的结果。我会使用以下电话:

aggregate(df, df["Country"], 
          function(x) ifelse(is.numeric(x), sum(x), length(x)))

它在做什么:

  1. df第一个参数是您要汇总的数据,因此只是您的初始数据框。
  2. df["Country"]指定了您要用于汇总数据框的组,在本例中为国家/地区ID。
  3. function(x) ...这是定义一个自定义函数,该函数将使用df定义的组应用于df["Country"]的每一列。在这里,我们使用ifelse()调用,以便var字段(数字),我们使用与Country字段不同的函数。应用于sum()字段的var将按国家/地区汇总,其中length()将获取每个国家/地区的出现次数。