用Rbase中的NA替换数据框中的字符

时间:2020-05-12 05:33:10

标签: r replace

我有一个数据框,如:

       Domain         Phylum          Class          Order
ID_1 Bacteria  Cyanobacteria Unclassified_c Unclassified_o
ID_2 Bacteria  Cyanobacteria Unclassified_c Unclassified_o
ID_3 Bacteria  Bacteroidetes Unclassified_c Unclassified_o
ID_4 Bacteria Proteobacteria Unclassified_c Unclassified_o
ID_5 Bacteria  Bacteroidetes Unclassified_c Unclassified_o

,我想将所有字符Unclassified_c,Unclassified_o,elment_3等替换为NA,所以我尝试了:

df[df == "Unclassified_c" ] <- NA

如果我使用一个一个的值,这很好用,但有时可能很多。因此,我想尝试一些模式列表,然后再使用它,例如:

Remove_list <- ("Unclassified_c", "Unclassified_o", "element_3", "element_4", "element_x") 

,然后使用该列表替换NA:

df[ df == Remove_list ] <- NA 

它将某些值更改为NA,但不是全部。我不想使用字符串库,因为它消除了行名(ID_1 .. ID_x)并且我需要它,所以我想尝试Rbase,有任何建议

非常感谢!!!!

1 个答案:

答案 0 :(得分:3)

我们可以将sapply%in%一起使用,它返回Remove_list中是否存在值的逻辑矩阵。我们可以为NA的值分配TRUE

df[sapply(df, `%in%`, Remove_list)] <- NA

df
#       Domain         Phylum Class Order
#ID_1 Bacteria  Cyanobacteria  <NA>  <NA>
#ID_2 Bacteria  Cyanobacteria  <NA>  <NA>
#ID_3 Bacteria  Bacteroidetes  <NA>  <NA>
#ID_4 Bacteria Proteobacteria  <NA>  <NA>
#ID_5 Bacteria  Bacteroidetes  <NA>  <NA>
相关问题