【问题标题】:aggregating a data frame over a column在列上聚合数据框
【发布时间】:2015-04-16 16:18:33
【问题描述】:

我有一个数据框,其中一列代表年份。比方说

region <- c("Spain", "Italy", "Norway")
year   <- c("2010","2011","2012","2010","2011","2012","2010","2011","2012")
m1     <- c("10","11","12","13","14","15","16","17","18")
m2     <- c("20","30","40","50","60","70","80","90","100")
data   <- data.frame(region,year,m1,m2)

我想以每个国家/地区 3 年平均值的方式汇总数据集 m1。我对如何使用数据框做到这一点感到困惑。任何评论都非常感谢。 提前致谢!

【问题讨论】:

  • 您应该在此处显示部分数据。

标签: r dataframe aggregate


【解决方案1】:

首先,您的m1 变量必须是数字。使用as.numeric()进行转换:

data$m1 <- as.numeric(as.character(data$m1))

然后,您可以像这样使用aggregate

aggregate(m1 ~ region, FUN = mean, data = data)

#   region m1
# 1  Italy 14
# 2 Norway 15
# 3  Spain 13

为避免尴尬的类型转换 (as.numeric(as.character())),您应该从设置中删除 m1m2 的引号:

m1     <- c(10,11,12,13,14,15,16,17,18)
m2     <- c(20,30,40,50,60,70,80,90,100)

使用dplyr的替代方法:

library(dplyr)

region <- c("Spain", "Italy", "Norway")
year   <- c("2010","2011","2012","2010","2011","2012","2010","2011","2012")
m1     <- c(10,11,12,13,14,15,16,17,18)
m2     <- c(20,30,40,50,60,70,80,90,100)
data   <- data.frame(region,year,m1,m2)

data %>%
  group_by(region) %>%
  summarise(mean_m1 = mean(m1),
            mean_m2 = mean(m2))

#   region mean_m1 mean_m2
# 1  Italy      14      60
# 2 Norway      15      70
# 3  Spain      13      50

【讨论】:

  • 嗨杰森,非常感谢!由于我很困惑聚合函数的哪一部分告诉 R 在设置的“年”内取平均值,我注意到输出也不正确。应该是西班牙=11,意大利=14,挪威=17。我想我可以从这里继续前进,但只是想指出答案并不是问题的确切要求。谢谢!
  • @Dilara 很好。修复了代码。该错误与将因子变量转换为数值变量有关-这要求您首先转换为字符,然后再转换为数字(我已修复)-但是,正如我在答案底部指出的那样,您可能会更好关闭从您的设置中删除引号以避免完全转换。
  • 是的,现在运行,谢谢! “mean”是否也可以用于定义集合子集的平均值,即我们的集合是 {2010,2011,2012},如果我们想要子集 {2010,2011} 的 2 年平均值?
  • @Dilara 是的,只需使用subset 函数。 subset(data, year %in% c("2010", "2011"))。如果您更喜欢dplyr 方法,您可以使用filter()。为了完整起见,对子集进行聚合将是:aggregate(m1 ~ region, data = subset(data, year %in% c("2010", "2011")), FUN = mean) - 请注意,您可以将任何函数传递给 FUN 参数,例如 sumvarsd
猜你喜欢
  • 1970-01-01
  • 2017-06-23
  • 2011-09-11
  • 1970-01-01
  • 2021-04-08
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
相关资源
最近更新 更多