我在R中有这样的数据:
T1 <- c(0,0,0,0,0)
T2 <- c(1,0,0,0,0)
T3 <- c(0,1,0,0,0)
T4 <- c(1,1,0,NA,1)
T5 <- c(0,1,0,NA,0)
df <- data.frame(T1,T2,T3,T4,T5)
T1 T2 T3 T4 T5
1 0 1 0 1 0
2 0 0 1 1 1
3 0 0 0 0 0
4 0 0 0 NA NA
5 0 0 0 1 0
我希望做的是把第一个“1”出现后的所有值都变成NA,所以它看起来像这样:
T1 T2 T3 T4 T5
1 0 1 NA NA NA
2 0 0 1 NA NA
3 0 0 0 0 0
4 0 0 0 NA NA
5 0 0 0 1 NA
有什么建议吗?谢谢!
3条答案
按热度按时间vm0i2vca1#
我们可以使用
rowCumsums
创建一个逻辑向量,然后进行赋值8i9zcol22#
使用
apply
从底数R得到which.max
的第一个1first1 = which.max(x == 1)
生成一个可排序的整数,并将不在序列中的值划分为子集。
mySeq <-ifelse(first1 == 1, length(x), first1)
子集值为NA
x[-seq(mySeq)] <- NA
返回值
vzgqcmou3#
下面是第一次透视到长格式的替代方法: