我有一个数据框,如:
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,有任何建议
非常感谢!!!!
答案 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>