R построчно подсчитывает количество определенных c вхождений в столбце и заполняет столбец, который показывает возрастающие вхождения - PullRequest
0 голосов
/ 06 мая 2020

Я хочу подсчитать количество c экземпляров в столбце и заполнить столбец, показывающий построчное увеличение.
В приведенном ниже примере я хочу подсчитать количество TRUE s в столбец TrueFalse и вставьте его (или создайте) в столбец TRUES. Другими словами, столбец TRUES постепенно увеличивается при TrueFalse==TRUE. То же самое касается столбца FALSES.
, подсчет должен возобновиться при изменении ID.

data<-read.table(text="
ID    TrueFalse   
1        NA        
1       TRUE       
1       TRUE       
1        NA        
1       FALSE      
1       FALSE      
2       TRUE       
2       FALSE      
2       NA         
2       NA         
2       FALSE      
2       TRUE       
2       FALSE",header=T)      

result:

ID    TrueFalse   TRUES      FALSES
1        NA         0         0
1       TRUE        1         0
1       TRUE        2         0
1        NA         2         0
1       FALSE       2         1
1       FALSE       2         2
2       TRUE        1         0
2       FALSE       1         1
2       NA          1         1
2       NA          1         1
2       FALSE       1         2 
2       TRUE        2         2
2       FALSE       2         3

Обратите внимание, что столбец TrueFalse может быть символом для подсчета, а не только ИСТИНА или ЛОЖЬ.

1 Ответ

1 голос
/ 06 мая 2020

Мы можем replace NA значения и подсчитывать, используя cumsum:

library(dplyr)

data %>%
  group_by(ID) %>%
  mutate(Trues = cumsum(replace(TrueFalse, is.na(TrueFalse), 0)), 
         Falses = cumsum(!replace(TrueFalse, is.na(TrueFalse), TRUE)))


#      ID TrueFalse Trues Falses
#   <int> <lgl>     <dbl>  <int>
# 1     1 NA            0      0
# 2     1 TRUE          1      0
# 3     1 TRUE          2      0
# 4     1 NA            2      0
# 5     1 FALSE         2      1
# 6     1 FALSE         2      2
# 7     2 TRUE          1      0
# 8     2 FALSE         1      1
# 9     2 NA            1      1
#10     2 NA            1      1
#11     2 FALSE         1      2
#12     2 TRUE          2      2
#13     2 FALSE         2      3

Если у нас есть символьные значения в TrueFalse, мы можем использовать:

data %>%
  group_by(ID) %>%
  mutate(Trues = cumsum(replace(TrueFalse, is.na(TrueFalse), '') == 'TRUE'),
         Falses = cumsum(replace(TrueFalse, is.na(TrueFalse), '') == 'FALSE'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...