【问题标题】:Sum does not count certain character vectors with summarise in dplyrSum 不计算 dplyr 中带有 summarise 的某些字符向量
【发布时间】:2021-10-29 10:11:54
【问题描述】:

当我在基数 R 中使用 sum 作为字符向量时,按预期计数:

Letters <- c("A","A","B", "B") 

Pass <- c("Pass", "Fail", "Pass", "Fail")

df <- data.frame( Letters, Pass)

sum(df$Pass=="Fail")

[1] 2

当我在 dplyr 中使用 sum 时,它的计数方式不同:

Pass_summary <- df %>% group_by(Letters) %>% 
  summarise(n=n(), 
            Pass=sum(Pass=="Pass"), 
            Fail=sum(Pass=="Fail")
  )

我现在从 MrGrumble 的评论中了解到 Pass 在第 3 行被重新分配。虽然我认为有必要使用 mutate() 来引用在 summarise() 阶段分配的变量?

【问题讨论】:

  • 你算在每个组中。尝试在没有 %>% group_by(Letters) 的情况下重新运行您的代码
  • dplyr 方法中,您将dfLetters 分组。所以很自然你会得到每个字母的PassFail 计数
  • 当我删除 %>% group_by(Letters) 时它也不算失败
  • 当你到达第三行 i summariseFail 时,变量 Pass 发生了变化。您实际上是在尝试总结sum(Pass=="Pass")。尝试在摘要中切换第 2 行和第 3 行。
  • 试试table(df)

标签: r dplyr


【解决方案1】:

您正在覆盖Pass

尝试切换summarize的顺序:

df %>% group_by(Letters) %>% 
  summarise(n=n(),  
            Fail=sum(Pass=="Fail"),
            Pass=sum(Pass=="Pass")
  )

输出:

  Letters     n  Fail  Pass
  <chr>   <int> <int> <int>
1 A           2     1     1
2 B           2     1     1

或者只是不要将其命名为“通过”!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多