Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R按行计算列中特定出现次数,并填充显示增量出现次数的列_R - Fatal编程技术网

R按行计算列中特定出现次数,并填充显示增量出现次数的列

R按行计算列中特定出现次数,并填充显示增量出现次数的列,r,R,我想计算一列中特定实例的数量,并填充一列,以显示行增长。 在下面的示例中,我想计算列TrueFalse中TRUEs的数量,并将其插入(或创建)列TRUES。换句话说,当TrueFalse==TRUE时,TRUES列将递增。这同样适用于列false 当ID发生变化时,应重新开始计数 data<-read.table(text=" ID TrueFalse 1 NA 1 TRUE 1 TRUE 1

我想计算一列中特定实例的数量,并填充一列,以显示行增长。
在下面的示例中,我想计算列
TrueFalse
TRUE
s的数量,并将其插入(或创建)列
TRUES
。换句话说,当
TrueFalse==TRUE
时,
TRUES
列将递增。这同样适用于列
false

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

数据我们可以
替换
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
data %>%
  group_by(ID) %>%
  mutate(Trues = cumsum(replace(TrueFalse, is.na(TrueFalse), '') == 'TRUE'),
         Falses = cumsum(replace(TrueFalse, is.na(TrueFalse), '') == 'FALSE'))