【问题标题】:Is there a way to return the names of rows with specific average column values?有没有办法返回具有特定平均列值的行的名称?
【发布时间】:2021-12-10 13:37:10
【问题描述】:

我正在使用数据集Income_Democracy.dta 我正在尝试查找平均 dem_ind 值大于 0.95 的国家/地区的名称。

我认为我需要对国家/地区进行子集化,找到平均值,然后将其作为新数据集返回,但如果没有特定的国家/地区名称,我不知道该怎么做。我已经摆弄了 which 和 subset 函数,但我只是 R 的新手,需要帮助。 对于我知道你可以做的特定国家

mean(subset(incdem$dem_ind, incdem$country =="Australia"))

但我不确定如何概括。

【问题讨论】:

标签: r subset


【解决方案1】:

按'country'分组,得到'dem_ind'的meanfilter'mean'列值大于0.95的行和pull'country'列作为vector

library(dplyr)
incdem %>%
    group_by(country) %>%
    summarise(Avg = mean(dem_ind, na.rm = TRUE), .groups = 'drop') %>%
    filter(Avg > 0.95) %>%
    pull(country)

或者另一种选择是

names(which(sapply(split(incdem$dem_ind, incdem$country), mean, 
        na.rm = TRUE) > 0.95))

如果是一个值域

names(which(sapply(split(incdem$dem_ind, incdem$country), function(x) {
          avg <- mean(x, na.rm = TRUE)
          avg > 0.2 & avg < 0.8})))

【讨论】:

  • 非常感谢,有没有办法应用它,以便它查找一系列值,例如在 0.2 和 0.8 之间?
  • @user17237061 对你有用吗?
  • 给出错误消息“Match.fun(FUN) 中的错误:缺少参数 FUN,没有默认值”
  • @user17237061 抱歉,split 缺少 )
猜你喜欢
  • 2018-04-28
  • 2020-03-30
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多