【问题标题】:Dplyr giving wrong resultsDplyr 给出错误的结果
【发布时间】:2019-02-06 18:28:28
【问题描述】:

我正在使用 dplyr 来汇总数据集,但它给出了错误的结果。我的代码是 bekow :-

Raw_Grp<-Raw_data%>%dplyr::group_by(as.character(Raw_data$Gardu))
                  `%>%dplyr::summarize(Avg=mean(Raw_data$Age))

下面是字符串:-

data.frame':    3016 obs. of  2 variables:
 $ Kecamatan: chr  "CENGKARENG" "CENGKARENG" "CENGKARENG" "CENGKARENG" ...
 $ Age      : num  377 370 352 313 299 291 260 223 207 200 ...

理想情况下,我应该按组值获取,但我得到的总平均值显示在所有不同的组中。我已经搜索并尝试了最大的可能性,例如创建 data.table 但结果相同。如果我在 excel 或其他收费中检查组,它会给出完美的结果。 请帮忙

【问题讨论】:

  • 去掉group_bysummarize里面的Raw_data$ 就是Raw_data %&gt;% group_by(Gardu) %&gt;% summarise(Avg = mean(Age))
  • 嗨,太棒了!它按预期工作。非常感谢 !!在这里被困了1.5天。如果有解释,那将是很好的理解。我的编程处于 R 的基础阶段。再次感谢!
  • dplyr 使用所谓的“引用函数”,这意味着您不会像最初尝试使用 as.character 那样将列名作为字符串提供,而是像常规文本和函数一样为您报价,因此group_by(Gardu)。要了解 dplyrtidyverse 中的其他包,我建议至少阅读 R for Data Science 的几章:r4ds.had.co.nz

标签: r dplyr mean


【解决方案1】:

当我们使用Raw_data$columnname 时,它会提取破坏group_by 条件的整个列。因此,语法将只是感兴趣列的列名

library(dplyr)
Raw_data %>% 
     group_by(Gardu) %>% 
     summarise(Avg = mean(Age))

但是,有时我们需要整列。例如,如果我们想检查 'Gardu' 中有多少 'Age' 元素小于整个 'Age' 列值

Raw_data %>%
    group_by(Gardu) %>%
    summarise(n = sum(Age < .$Age))

数据

Raw_data <- structure(list(Gardu = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L), .Label = c("a", "b", "c"), class = "factor"), 
Age = c(21L, 19L, 38L, 31L, 37L, 47L, 21L, 41L, 42L, 20L, 
34L, 25L, 37L, 37L, 23L)), class = "data.frame", row.names = c(NA, 
-15L))

【讨论】:

  • 在逻辑表达式中使用“整个‘年龄’列’是什么意思?你的意思是“平均(.$Avg)”
  • @42- 这只是一个显示表达式的示例,该表达式计算小于按“Gardu”分组的整个列中的值的数量。可以通过其他方式完成。
  • 问题是我认为它会抛出一个错误,但也许你已经测试过它并且它确实有意义?
  • 我也对你的 Age &lt; .$Age 示例感到困惑 - 似乎 Age 会被回收,我不知道结果会有什么意义。
  • @Gregor 这不会给出与sapply(split(Raw_data$Age, Raw_data$Gardu), function(x) sum(x &lt; Raw_data$Age)) 相同的输出吗?基本上,该示例是为了展示他们想要提取整列进行某种比较的情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 2019-08-08
  • 2011-11-15
  • 2014-01-30
  • 2018-08-01
  • 2016-08-30
  • 1970-01-01
相关资源
最近更新 更多