通过了解dplyr和组_

通过了解dplyr和组_,r,dplyr,R,Dplyr,我在我的工作流程中使用dplyr已经有一段时间了。我逐渐意识到,也许我不理解组的功能。请有人解释一下,是否有更好的方法来实现我的目标 我最初的理解是,通过在诸如mutate之类的操作之前引入group_by(),mutate函数将在group_by()指定的组之间不连续地执行其功能,并在group_by()指定的每个条件下重新启动其操作 这似乎不是真的,我不得不求助于将我的数据表按之前输入group_by()的条件拆分成列表,执行我预期的功能,然后将列表折叠回矩阵;通过使用lappy 下面的例子

我在我的工作流程中使用dplyr已经有一段时间了。我逐渐意识到,也许我不理解组的功能。请有人解释一下,是否有更好的方法来实现我的目标

我最初的理解是,通过在诸如mutate之类的操作之前引入group_by(),mutate函数将在group_by()指定的组之间不连续地执行其功能,并在group_by()指定的每个条件下重新启动其操作

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

下面的例子。我的意图是针对每个条件对TVC列执行求和运算。但是,您将看到求和列是跨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.
>(数据%>%过滤器(`运行时间(天)`%
+安排(条件,`经过的时间(天)`)%>%
+选择(条件,`经过的时间(天)`,TVC)%>%
+过滤器(!is.na(TVC))%>%
+分组依据(条件)%>%
+变异(总和=总和(TVC)))
#A tibble:94 x 4
#组:条件[24]
条件`经过的时间(天)`TVC总和
1A 0.000000秒15400921.15400921。
2 1A 4.948611秒11877256.27278177
3 1A 6.027778秒11669731.38947908。
41a 6.949306秒11908853.50856761。
5 1B 0.000000秒14514263.65371024。
6 1B 4.948611秒8829356.74200380。
7 1B 6.027778秒12068221.86268601。
8 1B 6.949306秒10111424.96380026。
9 1C 0.000000秒15400921.111780946。
10 1C 4.948611秒8680060 120461006。

嘿,我会在您的代码块之前尝试此操作:

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

按照建议尝试;这是一个不可能的…仍然在所有条件下显示
求和
作为一个求和。在这里尝试在mutate:mutate(summation=sum(TVC))中进行此更改。我认为求和不是您想要做的。您现在能够重现此行为吗?
df %>% group_by(Condition) %>% mutate(summation =cumsum(TVC))