Подсчитывать и назначать последовательные вхождения переменной - PullRequest
0 голосов
/ 29 января 2020

I sh для подсчета последовательного вхождения любого значения и присвоения этого значения этому значению в следующем столбце. Ниже приведен пример ввода и желаемого выхода:

dataset <- data.frame(input = c("a","b","b","a","a","c","a","a","a","a","b","c"))
dataset$count <- c(1,2,2,2,2,1,4,4,4,4,1,1)

dataset  
   input   count
     a       1
     b       2
     b       2
     a       2
     a       2
     c       1
     a       4
     a       4
     a       4
     a       4
     b       1
     c       1

С помощью rle(dataset$input) я могу просто получить количество вхождений каждого значения. Но я хочу получить результат в указанном выше формате.

Мой вопрос похож на: R: подсчет последовательных вхождений значений в одном столбце Но здесь вывод в последовательности, и я хочу назначить рассчитывать на это значение.

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Вы можете повторить lengths аргумент lengths время в rle

with(rle(dataset$input), rep(lengths, lengths))
#[1] 1 2 2 2 2 1 4 4 4 4 1 1

Используя dplyr, мы можем использовать lag для создания групп и затем подсчитать число строк в каждой группе.

library(dplyr)

dataset %>%
  group_by(gr = cumsum(input != lag(input, default = first(input)))) %>%
  mutate(count = n())

и с data.table

library(data.table)
setDT(dataset)[, count:= .N, rleid(input)]

data

Убедитесь, что столбец input символ, а не factor.

dataset <- data.frame(input = c("a","b","b","a","a","c","a","a","a","a","b","c"),
           stringsAsFactors = FALSE)
0 голосов
/ 29 января 2020

Мы можем использовать rleid с dplyr

library(dplyr)
dataset %>%
   group_by(grp = rleid(input)) %>%
   mutate(count = n())
...