我在R中有以下df,其中列为二进制值(0,1):
'data.frame': 10 obs. of 7 variables:
$ Round.1: int 0 0 0 1 1 0 0 0 1 0
$ Round.2: int 0 0 0 0 1 0 0 0 0 0
$ Round.3: int 0 0 0 0 1 0 0 0 1 0
$ Round.4: int 0 0 0 1 0 0 0 0 0 0
$ Round.5: int 0 0 0 1 1 0 0 0 0 0
$ Round.6: int 0 0 0 0 0 0 1 0 1 0
$ Round.7: int 0 0 0 0 1 0 1 0 0 0
我想(1)在每列中找到1的第一个发生率,(2)用NA替换列中的所有后续值。
屈服:
'data.frame': 10 obs. of 7 variables:
$ Round.1: int 0 0 0 1 1 0 0 0 1 0
$ Round.2: int 0 0 0 NA NA 0 0 0 NA 0
$ Round.3: int 0 0 0 NA NA 0 0 0 NA 0
$ Round.4: int 0 0 0 NA NA 0 0 0 NA 0
$ Round.5: int 0 0 0 NA NA 0 0 0 NA 0
$ Round.6: int 0 0 0 NA NA 0 1 0 NA 0
$ Round.7: int 0 0 0 NA NA 0 NA 0 NA 0
任何帮助都非常感谢。
5条答案
按热度按时间wfveoks01#
对于每个二进制向量
v
,我们可以尝试示例
aiazj4mn2#
以下是
dplyr
解决方案:1.使用
match(1, .)
,我们得到每列中第一个1
的索引,否则NA
。1.使用
row_number()
,我们得到一个与列长度相同的向量,包含行号。1.对于
if_else(row_number() > match(1, .), NA_integer_, .)
,我们将第一个1
之后的所有值替换为NA
:wqlqzqxt3#
碱R溶液:
xt0899hw4#
我们可以使用NA
replace
累加最大值和滞后累加最大值为1的列的所有值,因为replace
中的list
参数自动将1和0强制为逻辑索引。6za6bjd05#
使用
rollapplyr
,其窗口等于直到当前元素的所有元素,检查在它之前是否有任何1,如果是,则输出NA,否则保持当前值。请注意,any
应用于空向量会给出FALSE,head(x, -1)
表示x
的所有元素,除了最后一个。所用的测试输入见末尾的注解。给予
注意事项