【问题标题】:replacing text with NA in R在R中用NA替换文本
【发布时间】:2019-07-10 04:24:09
【问题描述】:

我在数据框jd_df 中有一个变量PC_R,它描述了实验室测试结果。我想用 NA 替换这个变量中的一些数据(例如 tf、QNS、rej)。我试过这段代码:

 jd_df %>%
  replace(PC_R,TF,NA)

还有这个:

jd_df %>%
  replace(jd_df,PC_R==TF,NA)    

还有这个:

jd_df %>%
  replace(PC_R,"TF","NA")

还有这个:

jd_df %>%
  replace(jd_df,PC_R%in%TF,NA)

我不断收到错误:

Error in replace(., jd_df, PC_R %in% TF, NA) : unused argument (NA)

我想知道替换命令是否不是要走的路。

【问题讨论】:

  • 你可以试试jd_df %>% mutate(PC_R = replace(PC_R, PC_R %in% TF, NA))
  • @akrun 谢谢!这非常有效。

标签: r replace tidyverse


【解决方案1】:

您可以使用 case_when 来实现这一点,如下面的 iris 数据集所示

library(dplyr)
iris <- iris %>% 
  mutate(Species = as.character(Species)) %>% 
  mutate(Species = case_when(
    Species == "setosa" ~ NA_character_, 
    TRUE ~ Species
  ))

可以这样指定多个更改:

iris %>% 
  mutate(Species = as.character(Species)) %>% 
  mutate(Species = case_when(
    Species == "setosa" | Species == "versicolor" ~ NA_character_, 
    TRUE ~ Species
  ))

reprex package (v0.2.0) 于 2019 年 2 月 16 日创建。

【讨论】:

  • 那行得通。我可以将此代码应用于多个单词还是必须一次一行?我尝试了 mutate(PC_R = case_when(PC_R == "TF",PC_R =="tf" ~ NA_character_, TRUE ~ PC_R)) 但它没有用。
【解决方案2】:

我发现这可以将多个字符文本更改为 NA:

jd_df %>% mutate(PC_R = replace(PC_R, PC_R %in% "TF"|PC_R %in% "tf"|PC_R %in% "rej",NA))

【讨论】:

    【解决方案3】:

    上面的case_when() 答案效果很好!一个更简单的替代方法是na_if() 函数,它将指定的字符串替换为NA。因此:

    library(dplyr)
    iris %>%
      mutate(Species = na_if(Species, "setosa")) 
    

    这会将Species 列中setosa 的所有实例更改为NA。在你的情况下,它可能是:

    jd_df %>%
      mutate(PC_R = na_if(PC_R, "TF"))
    

    将所有"TF" 替换为NA。您可以根据需要重复代码以捕获所有预期的 NA 值:

    jd_df %>%
      mutate(PC_R = na_if(PC_R, "TF"),
             PC_R = na_if(PC_R, "QNS"),
             PC_R = na_if(PC_R, "rej"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2014-11-30
      相关资源
      最近更新 更多