一些样本数据:
ID S1Qual S2Qual S3Qual S1 S2 S3
1 1 0 1 7 8 7
2 1 1 1 6 6 8
3 0 1 1 7 8 8
...
S1Qual、S2Qual 和 S3Qual 分别表示 S1PS、S2PS 和 S3PS 的质量。如果[n, S1Qual] == 1
,我想保留[n, S1PS]
;如果[n,S1Qual] == 0
,我想设置[n,S1PS] == NA
。
我有以下代码:
n <- 1
while (n <= number.of.rows) {
if (data$S1Qual[n] == 0) {data$S1[n] <- NA}
if (data$S2Qual[n] == 0) {data$S2[n] <- NA}
if (data$S3Qual[n] == 0) {data$S3[n] <- NA}
n <- n+1
}
这可以满足我的要求,但我希望有一种更有效/更简洁的方式(在实际数据框中,这些 S/SQual 对中的数量超过三个)。四处搜索将我带到ifelse()
and apply()
,这两者看起来很接近,但不太适合我想要的东西,除非我想错了。
有任何想法吗?