作者:平凡兔子007 | 来源:互联网 | 2022-11-24 22:50
我有一个数据集,我从中做了一个可重现的例子:
set.seed(1)
Data <- data.frame(
A = sample(0:5),
B = sample(0:5),
C = sample(0:5),
D = sample(0:5),
corr_A.B = sample(0:5),
corr_A.C = sample(0:5),
corr_A.D = sample(0:5))
> Data
A B C D corr_A.B corr_A.C corr_A.D
1 1 5 4 2 1 2 4
2 5 3 1 3 5 5 0
3 2 2 3 4 0 1 2
4 3 0 5 0 4 0 1
5 0 4 2 1 2 3 3
6 4 1 0 5 3 4 5
我想检查,对于每个列B,C和D,如果它们的一个单元格等于0,我想在同一行上用NA替换相应的corr_A列.例如,由于Data $ B [4]等于0,我希望Data $ corr_A.B [4]被NA替换.
我期待获得以下结果:
> Data
A B C D corr_A.B corr_A.C corr_A.D
1 1 5 4 2 1 2 4
2 5 3 1 3 5 5 0
3 2 2 3 4 0 1 2
4 3 0 5 0 NA 0 NA
5 0 4 2 1 2 3 3
6 4 1 0 5 3 NA 5
我尝试了不同的方法,使用for循环,但我很挣扎.此外,在我正在处理的数据集中,还有许多其他列不需要检查该条件,我希望能够专门指定我在哪些列中查找0值.
如果有人愿意尝试一下呢?非常感谢
1> Rui Barradas..:
单线使用功能is.na<-
.
is.na(Data[5:7]) <- Data[2:4] == 0
Data
# A B C D corr_A.B corr_A.C corr_A.D
#1 1 5 4 2 1 2 4
#2 5 3 1 3 5 5 0
#3 2 2 3 4 0 1 2
#4 3 0 5 0 NA 0 NA
#5 0 4 2 1 2 3 3
#6 4 1 0 5 3 NA 5