假设 df:
A B C D E F
1 10 NA 10 NA 10
10 NA 10 1 10 10
10 1 1 NA NA NA
10 10 NA 10 10 10
10 NA 10 10 1 10
我希望做的是遍历列以检查具有以下条件的每一行的值:
...随后,循环列中的行与相应的条件匹配,整行将被推送到 NA
期望的结果:
A B C D E F
NA NA NA NA NA NA
10 NA 10 1 10 10
NA NA NA NA NA NA
NA NA NA NA NA NA
NA NA NA NA NA NA
我尝试对其中一列执行此操作:
df[df$A<5, ] <- NA
然而,这导致了错误
Error in `[<-.data.frame`(`*tmp*`, df$A < 5, , value = NA) :
missing values are not allowed in subscripted assignments of data frames
请指教
您可以NA
在对不需要的行进行子集化后进行分配。
df[with(df,A<5 | C<3 | E<7 | F<2 |
is.na(A) | is.na(C) | is.na(E) | is.na(F)),] <- NA
df
# A B C D E F
#1 NA NA NA NA NA NA
#2 10 NA 10 1 10 10
#3 NA NA NA NA NA NA
#4 NA NA NA NA NA NA
#5 NA NA NA NA NA NA
方法是为每一行的每个条件创建一个逻辑向量,然后将它们与|
(或)组合。然后,您可以df
使用该逻辑向量进行子集化,以仅将满足条件的行替换为NA
。
使用with
使您不必输入df$
8 次。
根据实际数据中有多少条件,您可以使用 使其更紧凑Reduce
,但也许不能:
df[with(df,Reduce(`|`,c(list(A<5, C<3, E<7, F<2),
lapply(list(A,C,E,F),is.na)))),] <- NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句