R 与列y相关的列x的连续和

R 与列y相关的列x的连续和,r,dplyr,R,Dplyr,在我的数据集中,每过一天,卷数总是从1开始。就像这样: Particle_Size Titrant Day Volume_titrant <chr> <chr> <dbl> <dbl> 1 > 40 NaOH 0 1 2 > 40 NaOH 0

在我的数据集中,每过一天,卷数总是从1开始。就像这样:

Particle_Size Titrant      Day    Volume_titrant   
    <chr>         <chr>   <dbl>          <dbl>     
  1 > 40          NaOH        0              1     
  2 > 40          NaOH        0              2     
  3 > 40          NaOH        0              3     
  4 > 40          NaOH        0              4     
  5 > 40          NaOH        0              5     
 39 > 40          NaOH        8              1    
 40 > 40          NaOH        8              2     
 41 > 40          NaOH        8              3     

105 <60           NaOH        0              1     
106 <60           NaOH        0              2     
107 <60           NaOH        0              3     
131 <60           NaOH        5              2     
132 <60           NaOH        5              4    
Particle_Size Titrant       Day     Volume_titrant  Volume_total
    <chr>         <chr>   <dbl>          <dbl>      <dbl>
  1 > 40          NaOH        0              1     1
  2 > 40          NaOH        0              2     2
  3 > 40          NaOH        0              3     3
  4 > 40          NaOH        0              4     4
  5 > 40          NaOH        0              5     5
 39 > 40          NaOH        8              1     6
 40 > 40          NaOH        8              2     7
 41 > 40          NaOH        8              3     8

105 <60           NaOH        0              1     1
106 <60           NaOH        0              2     2
107 <60           NaOH        0              3     3
131 <60           NaOH        5              2     5
132 <60           NaOH        5              4     9
我尝试将我的数据集分组,然后使用
cumsum()
变异一个新列。 这会将几天的体积相加,并且每增加一个新的粒子大小,也会从1开始。到目前为止还不错,但我在示例中看到,这并不是我想要的数量

df = na.omit()%>%
     group_by(Particle_Size, Titrant)%>%
     mutate(Total_Volume = cumsum(Volume_titrant))
有没有一个函数,或者我需要一个带循环的解决方案? 有什么想法吗


在此处输入代码

您可以尝试在
mutate()调用中使用
sum()

library(dplyr)

dat %>%
  group_by(Particle_Size) %>%
  mutate(Total_valume = sum(Volume_titrant)) %>% 
  ungroup()

# # A tibble: 13 x 5
#    Particle_Size Titrant   Day Volume_titrant Total_valume
#            <int> <chr>   <int>          <int>        <int>
#  1            40 NaOH        0              1           21
#  2            40 NaOH        0              2           21
#  3            40 NaOH        0              3           21
#  4            40 NaOH        0              4           21
#  5            40 NaOH        0              5           21
#  6            40 NaOH        8              1           21
#  7            40 NaOH        8              2           21
#  8            40 NaOH        8              3           21
#  9            60 NaOH        0              1           12
# 10            60 NaOH        0              2           12
# 11            60 NaOH        0              3           12
# 12            60 NaOH        5              2           12
# 13            60 NaOH        5              4           12
库(dplyr)
dat%>%
分组依据(粒度)%>%
突变(总量=总量(体积滴定))%>%
解组()
##A tibble:13 x 5
#粒度滴定液日体积滴定液总值
#                                  
#140氢氧化钠01 21
#240naoh0221
#340氢氧化钠0321
#440氢氧化钠0421
#540NaOH 0521
#6 40氢氧化钠8 1 21
#7 40氢氧化钠8 2 21
#840氢氧化钠8321
#9 60氢氧化钠01 12
#1060naoh0212
#1160氢氧化钠0312
#12 60氢氧化钠5 2 12
#13 60氢氧化钠5 4 12

您可以尝试在
mutate()调用中使用
sum()

library(dplyr)

dat %>%
  group_by(Particle_Size) %>%
  mutate(Total_valume = sum(Volume_titrant)) %>% 
  ungroup()

# # A tibble: 13 x 5
#    Particle_Size Titrant   Day Volume_titrant Total_valume
#            <int> <chr>   <int>          <int>        <int>
#  1            40 NaOH        0              1           21
#  2            40 NaOH        0              2           21
#  3            40 NaOH        0              3           21
#  4            40 NaOH        0              4           21
#  5            40 NaOH        0              5           21
#  6            40 NaOH        8              1           21
#  7            40 NaOH        8              2           21
#  8            40 NaOH        8              3           21
#  9            60 NaOH        0              1           12
# 10            60 NaOH        0              2           12
# 11            60 NaOH        0              3           12
# 12            60 NaOH        5              2           12
# 13            60 NaOH        5              4           12
库(dplyr)
dat%>%
分组依据(粒度)%>%
突变(总量=总量(体积滴定))%>%
解组()
##A tibble:13 x 5
#粒度滴定液日体积滴定液总值
#                                  
#140氢氧化钠01 21
#240naoh0221
#340氢氧化钠0321
#440氢氧化钠0421
#540NaOH 0521
#6 40氢氧化钠8 1 21
#7 40氢氧化钠8 2 21
#840氢氧化钠8321
#9 60氢氧化钠01 12
#1060naoh0212
#1160氢氧化钠0312
#12 60氢氧化钠5 2 12
#13 60氢氧化钠5 4 12

正如我已经说过的,您想要的输出中似乎有一些输入错误。为什么第132行的期望输出是9?而第40行和第41行中的期望输出分别为7和8。第132行应为7行,或第40和41行应分别为8和11行?你的逻辑有点混乱!是否只想将前一天的最后一个值添加到当前日期?试试这个语法

库(dplyr)
df%>%左侧加入(df%>%分组依据(粒度,天)%>%
总结(最后一次值=最后一次(体积滴定),.groups='drop')%>%
分组依据(粒度)%>%
变异(last_val=cumsum(滞后(last_val,默认值=0)),按=c(‘粒径’、‘天’)%%>%
突变(期望值=体积滴定液+最后值)
#>粒度滴定液日体积滴定液上次滴定液所需值
#>1>40 NaOH 01 01
#>2>40 NaOH 0 2 0 2
#>3>40氢氧化钠03 03
#>4>40 NaOH 0 4 0 4
#>5>40氢氧化钠0505
#>6>40 NaOH 8 1 5 6
#>7>40 NaOH 8 2 5 7
#>8>40 NaOH 8 3 5 8

#>9 10 11 12 13正如我已经说过的,您想要的输出中似乎有一些输入错误。为什么第132行的期望输出是9?而第40行和第41行中的期望输出分别为7和8。第132行应为7行,或第40和41行应分别为8和11行?你的逻辑有点混乱!是否只想将前一天的最后一个值添加到当前日期?试试这个语法

库(dplyr)
df%>%左侧加入(df%>%分组依据(粒度,天)%>%
总结(最后一次值=最后一次(体积滴定),.groups='drop')%>%
分组依据(粒度)%>%
变异(last_val=cumsum(滞后(last_val,默认值=0)),按=c(‘粒径’、‘天’)%%>%
突变(期望值=体积滴定液+最后值)
#>粒度滴定液日体积滴定液上次滴定液所需值
#>1>40 NaOH 01 01
#>2>40 NaOH 0 2 0 2
#>3>40氢氧化钠03 03
#>4>40 NaOH 0 4 0 4
#>5>40氢氧化钠0505
#>6>40 NaOH 8 1 5 6
#>7>40 NaOH 8 2 5 7
#>8>40 NaOH 8 3 5 8
#>9 10 11 12 13(1)
分组依据(粒度、滴定剂)
可以,但您没有向其提供任何数据。在此之前,您是否省略了前面的
mydata%%>%
?或者您是否打算使用
分组依据(mydata、粒度、滴定液)
?(2) 如果你不想要一个累积的总和,也许你应该代替
mutate
library(dplyr)

dat %>%
  group_by(Particle_Size) %>%
  mutate(Total_valume = sum(Volume_titrant)) %>% 
  ungroup()

# # A tibble: 13 x 5
#    Particle_Size Titrant   Day Volume_titrant Total_valume
#            <int> <chr>   <int>          <int>        <int>
#  1            40 NaOH        0              1           21
#  2            40 NaOH        0              2           21
#  3            40 NaOH        0              3           21
#  4            40 NaOH        0              4           21
#  5            40 NaOH        0              5           21
#  6            40 NaOH        8              1           21
#  7            40 NaOH        8              2           21
#  8            40 NaOH        8              3           21
#  9            60 NaOH        0              1           12
# 10            60 NaOH        0              2           12
# 11            60 NaOH        0              3           12
# 12            60 NaOH        5              2           12
# 13            60 NaOH        5              4           12