【发布时间】: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方法中,您将df按Letters分组。所以很自然你会得到每个字母的Pass和Fail计数 -
当我删除 %>% group_by(Letters) 时它也不算失败
-
当你到达第三行 i
summarise和Fail时,变量Pass发生了变化。您实际上是在尝试总结sum(Pass=="Pass")。尝试在摘要中切换第 2 行和第 3 行。 -
试试
table(df)