R:一次根据一列中的条件将整行推到 NA

艾格尼丝·李

假设 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

我希望做的是遍历列以检查具有以下条件的每一行的值:

  • A < 5 或 NA
  • C < 3 或 NA
  • E < 7 或 NA
  • F < 2 或 NA

...随后,循环列中的行与相应的条件匹配,整行将被推送到 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫根据一列中的值条件一次覆盖多列中的值

将值NA替换为R中另一列的值

根据与另一列匹配的行子集将NA替换为均值?

根据上一次满足条件的时间,将一列中的数据与另一行对齐

以第三列的匹配为条件,用同一列中的值替换NA

遍历一列,忽略但保留R中的NA值

将R中另一列中的NA与另一列中的某些模式交换

根据上一列添加NA

根据另一列中的值用预定值替换一列中的NA

根据另一列中的条件过滤非NA值,并保留所有其他记录

用R中另一列中的值替换特定列中的非NA值

将R中矩阵的每一列的最后n个非NA值求和

对于R中缺少的值,如何将一列的子集放入0而不是NA的新列中?

根据R中的另一列求和,但跳过带有NA的行

根据另一列中的共识值替换一列中的NA值

对于r中的每个组,将NA替换为同一列的另一行中的值

当 R 中的 NA 太多时删除其中的一列

当所有值都是日期时,将一列中的 NA 替换为另一列中的值

根据 R 中的条件将列的值设置为 NA

根据相似列的值填写一列中的NA值

将一列中的 NA 替换为 dplyr 中另一列的值

当一列的值大于 r 中的另一列时,如何将数据框中的行值转换为 NA?

如何根据 is.na() 和匹配条件一次加入多列?

如何根据python中的另一列填充NA值

R:将 1000 列中的 NA 更改为另一列的值

如何使用另一列的结果并考虑另一列的条件将数据框中的 NA 替换为特定值?

基于同一列的条件填充NA

如何根据另一列是否为 NA 向上搜索一列的值?

如何根据熊猫中的另一列主值替换 <NA> 值