【问题标题】:How to replace the value with multiple conditions in R如何用R中的多个条件替换值
【发布时间】:2021-10-18 20:34:12
【问题描述】:

我有一些data,我发现了一些异常值需要修改。但我不想替换该列中的所有值,而是想使用某些特定标准来替换该列中的异常值。

例如,在day 列中,对于拥有UniqueKey == 1234 和UniqueKey == 1321 的参与者,我想将80 替换为8,70 替换为7。

对于UniqueKey == 1484 的参与者,我想将month 列的值从79 替换为09,并将day 列替换为7。

像这样用多个条件替换,我该如何实现?

非常感谢。

这是我的代码,它根本不起作用。

jimma3n<-jimma3 %>%
        select(Enterdateofexam,Enterdateofexam2, Enterdayofexam, UniqueKey,MEDICALRECORD)%>%
        mutate(
                 day=str_replace_all(day,c("80"="8","70"="7")),
                 month=str_replace(month,"25"="05"),
                 if_else((UniqueKey=="1484" & month=="79"), (day=="7"& month=="09") )
              )

【问题讨论】:

  • 请dput(head(.))您的数据!
  • 运行 dput(head(.)), 显示:structure(list(UniqueKey = c("530", "530", "530", "531", "531", "531" ), MEDICALRECORD = c("577207", "577207", "577207", "575333", "575333", "575333"),Enterdateofexam = c("7.06", "8.06", "9.06", "22.12" , "23.12", "24.12")...
  • @mikebader 我查看了链接,仍然不知道如何使用多个条件来替换特定值。你能举一个我的例子吗?谢谢~~!
  • 数据框中的 day 和 month 列在哪里?你的意思是 & 还是 |当您声明 UniqueKey == 1234 和 UniqueKey == 1321 时。我想应该是 or?

标签: r dplyr


【解决方案1】:

更新:感谢 Onyambu 的宝贵评论:

jimma3n<-jimma3 %>%
    select(Enterdateofexam,Enterdateofexam2, Enterdayofexam, UniqueKey,MEDICALRECORD)%>%
    mutate(
        day= case_when(UniqueKey == 1234 | UniqueKey= 1321 & day==80 ~ 8,
                       UniqueKey == 1234 | UniqueKey= 1321 & day==70 ~ 7,
                       UniqueKey == 1484 & day==79 ~ 7,
                       TRUE ~ day),
        month = case_when(UniqueKey== 1484 & month==79 ~ 09,
                       TRUE ~ month)
        )

好的,试试这个,请告诉我:

jimma3n<-jimma3 %>%
    select(Enterdateofexam,Enterdateofexam2, Enterdayofexam, UniqueKey,MEDICALRECORD)%>%
    mutate(
        day= case_when(UniqueKey == 1234 | UniqueKey= 1321 & day==80 ~ 8,
                       UniqueKey == 1234 | UniqueKey= 1321 & day==70 ~ 7,
                       UniqueKey == 1484 & day==79 ~ 7,
                       TRUE ~ day)
        ) %>%
    mutate(
        month = case_when(UniqueKey== 1484 & month==79 ~ 09,
        TRUE ~ month)
        )

【讨论】:

  • 为什么有两个变异函数? +1 虽然
  • 我刚刚从 op.我不确定因为day 和month。所以我无法测试。你认为我们可以将两者结合在一个变异中吗?
  • 是的,为什么不呢。 mutate 可以做多个赋值。不只是一列。
  • 我会检查并更新。等一下。那没问题。但我想这与月份相同。所以请str(jimma3) 并发布控制台的输出。
  • 将mutate(day... 中的~8 and ~7 and ~7 替换为~'8' and ~'7' and ~'7'。如果错误也发生在月份,那么在那里做同样的事情。另一种可能性是使用type.convert(as.is = TRUE 作为mutate 之前的第一行,然后您可以保持原样。
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多