Добавить новый столбец путем мутации с условным условием - PullRequest
1 голос
/ 03 мая 2019

Мне нужно добавить новый столбец в dplyr путем изменения, включающего условное выражение. Я не могу найти способ реализовать следующую схему в Tidyverse, но я могу сделать это в Excel. Это заставляет меня чувствовать себя чем-то вроде варвара. Кто-нибудь знает, как это сделать в тидиверсе?

  • Первое значение в столбце счетчика измерений равно 1, независимо от того, что находится в столбце «n».
  • После первого ряда приведем условное. Если столбец n = 1, вывод running.count представляет собой значение running.count из строки выше +1. Если столбец n = 0, выходной файл running.count представляет собой значение running.count из строки выше +1 только в том случае, если это первые 0 после 1 в столбце «n». В противном случае это просто значение 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 голосов
/ 03 мая 2019

Мы можем использовать 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

data

df1 ,- structure(list(n = c(0, 1, 0, 0, 0, 0, 1, 0, 1, 1)), 
   class = "data.frame", row.names = c(NA, -10L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...