【问题标题】:Replace characters from data frame with NA in Rbase [duplicate]在Rbase中用NA替换数据框中的字符[重复]
【发布时间】:2020-07-23 16:55:56
【问题描述】:

我有一个像这样的数据框:

       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 一些值,但不是全部。我不想使用 stringr 库,因为它消除了行名(ID_1 .. ID_x)并且我需要它,所以我想尝试 Rbase,任何建议

非常感谢!!!!

【问题讨论】:

    标签: r replace


    【解决方案1】:

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

    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>
    

    【讨论】:

    • 我的比你的早 3 秒,但你的更优雅。
    • 非常感谢,效果很好!!!
    猜你喜欢
    • 2011-03-22
    • 2013-09-04
    • 2019-09-26
    • 2012-10-21
    • 2016-05-10
    • 2018-12-29
    • 1970-01-01
    • 2019-06-02
    • 2019-01-02
    相关资源
    最近更新 更多