通过涉及条件的mutate添加新列

时间:2019-05-03 18:22:58

标签: r dplyr

我需要通过涉及条件的mutate在dplyr中添加新列。我找不到在tidyverse中实现以下方案的方法,但可以在Excel中实现。那让我觉得自己像个野蛮人。有人知道如何在tidyverse中做到这一点吗?

  • 无论“ n”列中的内容如何,​​运行计数列的第一个值为1。
  • 第一行之后是有条件的。如果n列= 1,则running.count输出是+1上方行中的running.count值。如果n列= 0,则running.count输出是+1上方行中的running.count值,仅当它是“ n”列中1后面的第一个0时。否则,它只是上一行中的running.count值。

以下是一些具有所需输出的玩具数据:

data.frame("n"=c(0,1,0,0,0,0,1,0,1,1),"running.count"=c(1,2,3,3,3,3,4,5,6,7))

This is the output.

1 个答案:

答案 0 :(得分:0)

我们可以使用rleid中的data.table来创建running.count列

library(dplyr)
library(data.table)
df1 %>% 
   group_by(running.count = rleid(n) ) %>% 
   mutate(ind = if(all(n==1))  row_number() - 1 else 0) %>% 
   ungroup %>% 
   mutate(running.count = rleid(running.count, ind)) %>% 
   select(-ind)
# A tibble: 10 x 2
#       n running.count
#   <dbl>         <int>
# 1     0             1
# 2     1             2
# 3     0             3
# 4     0             3
# 5     0             3
# 6     0             3
# 7     1             4
# 8     0             5
# 9     1             6
#10     1             7

数据

df1 ,- structure(list(n = c(0, 1, 0, 0, 0, 0, 1, 0, 1, 1)), 
   class = "data.frame", row.names = c(NA, -10L))