【问题标题】:Understanding dplyr and group_by了解 dplyr 和 group_by
【发布时间】:2021-02-14 11:43:15
【问题描述】:

我在我的工作流程中使用 dplyr 已经有一段时间了。我开始意识到也许我不了解 group_by 函数。有人可以解释一下是否有更好的方法来实现我的目标。

我最初的理解是,通过在 mutate 等操作之前引入 group_by(),mutate 函数将在 group_by() 指定的组之间独立执行其功能,并在 group_by() 指定的每个 Condition 上重新启动它的操作

这似乎不是真的,我不得不求助于按照我之前输入 group_by() 的条件将我的数据表拆分为列表,执行我的预期功能,然后将列表折叠回一个矩阵;通过使用 lapply。

示例如下。我的意图是对每个条件的 TVC 列执行 cumsum 操作。但是,您会看到求和列是整个 TVC 列的直接 cumsum 运算,没有在 Condition 列指定的组之间进行离散化。

> (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.

【问题讨论】:

标签: r dplyr


【解决方案1】:

嘿,我会在你的代码块之前尝试这个操作:

df$Condition <- as.factor(df$Condition)

我认为 group_by 在处理因子时效果最好。我认为它也应该适用于角色,但根据我的经验,错误更少,效果更好。不知道其他人有没有这个问题。

之后,按照 Karthik 的建议进行操作:

df %>% group_by(Condition) %>% mutate(summation =cumsum(TVC))

【讨论】:

  • 按建议尝试;这是不行的......仍然将summation显示为所有条件下的cumsum
  • ooo 在这里尝试改变 mutate:mutate(summation = sum(TVC)) 我认为 cumsum 不是你想要的
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2021-04-17
  • 2019-11-27
  • 1970-01-01
相关资源
最近更新 更多