r - 了解 dplyr 和 group_by
问题描述
很长一段时间以来,我一直在我的工作流程中使用 dplyr。我开始意识到也许我不了解 group_by 函数。有人可以解释一下是否有更好的方法来实现我的目标。
我最初的理解是,通过在 mutate 等操作之前引入 group_by(),mutate 函数将在 group_by() 指定的组之间单独执行其功能,并在 group_by() 指定的每个 Condition 上重新启动它的操作
这似乎不是真的,我不得不求助于将我的数据表按照我之前输入 group_by() 的条件拆分为列表,执行我想要的功能,然后将列表折叠回矩阵;通过使用 lapply。
下面的例子。我的意图是对每个条件的 TVC 列执行 cumsum 操作。但是,您会看到求和列是整个 TVC 列的直接累加运算,没有条件列指定的组之间的离散化。
> (data %>% filter(`Elapsed Time (days)`<=8) %>%
+ arrange(Condition,`Elapsed Time (days)`) %>%
+ select(Condition, `Elapsed Time (days)`, TVC) %>%
+ filter(!is.na(TVC)) %>%
+ group_by(Condition) %>%
+ mutate(summation =cumsum(TVC)))
# A tibble: 94 x 4
# Groups: Condition [24]
Condition `Elapsed Time (days)` TVC summation
<chr> <drtn> <dbl> <dbl>
1 1A 0.000000 secs 15400921. 15400921.
2 1A 4.948611 secs 11877256. 27278177
3 1A 6.027778 secs 11669731. 38947908.
4 1A 6.949306 secs 11908853. 50856761.
5 1B 0.000000 secs 14514263. 65371024.
6 1B 4.948611 secs 8829356. 74200380.
7 1B 6.027778 secs 12068221. 86268601.
8 1B 6.949306 secs 10111424. 96380026.
9 1C 0.000000 secs 15400921. 111780946.
10 1C 4.948611 secs 8680060 120461006.
解决方案
嘿,我会在你的代码块之前尝试这个操作:
df$Condition <- as.factor(df$Condition)
我认为 group_by 在处理因素时效果最好。我认为它也应该适用于角色,但根据我的经验,错误更少,效果更好。不知道其他人有没有这个问题。
之后,按照 Karthik 的建议执行此操作:
df %>% group_by(Condition) %>% mutate(summation =cumsum(TVC))
推荐阅读
- python - 尽管全球声明,照片不会出现在 tkinter
- function - 为什么像 (String).showAsToast() 这样的 kotlin 函数不起作用?
- weblogic12c - Oracle Forms 12c 中 TEXT_IO 的工作目录
- php - 在 PHP 中解析对象输出数据
- xaml - 第一项比collectionview xamarin表单中的其他项更宽
- angular - Angular Jasmine - 从组件中的模拟服务中窥探主题
- rust - 如何组合(包括嵌套数组值)两个 serde_yaml::Value 对象?
- javascript - Vue.js - 等待使用“csv-parse”包检索来自 CSV 的单个记录
- python - 烧瓶关系返回查询对象而不是数据
- python - 如何正确地对具有变量类型的函数进行类型注释?