我需要帮助分组和汇总数据框。我已经看了很多可能的答案,但我还没有发现任何可以解决问题的方法。
我有一个类似于以下内容的数据框:
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
答案 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)))
它在做什么:
df
第一个参数是您要汇总的数据,因此只是您的初始数据框。df["Country"]
指定了您要用于汇总数据框的组,在本例中为国家/地区ID。function(x) ...
这是定义一个自定义函数,该函数将使用df
定义的组应用于df["Country"]
的每一列。在这里,我们使用ifelse()
调用,以便var
字段(数字),我们使用与Country
字段不同的函数。应用于sum()
字段的var
将按国家/地区汇总,其中length()
将获取每个国家/地区的出现次数。