【问题标题】:update names based on columns R根据列 R 更新名称
【发布时间】:2021-10-12 02:46:31
【问题描述】:

在这个问题(update names based on columns)之后,我想问的另一件事

df <- data.frame(name1 = c("a", "a", "a", "a", 'a', NA, NA, NA,NA),
                 name2 = c("b", "b", "b", "b", "c", NA, NA, NA,NA),
                 name3 = c("b", "b", "b", "b", "c", "a", "a", "a", "f"))

df
  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     a
7  <NA>  <NA>     a
8  <NA>  <NA>     a
9  <NA>  <NA>     f

现在,我想保留f,同时将a 替换为b

-期望的输出

  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     b
7  <NA>  <NA>     b
8  <NA>  <NA>     b
9  <NA>  <NA>     f

来自@Rui 和@TarJae 的cmets 的代码

df %>% 
  mutate(name3 = case_when(
    any(name1 == "a") & is.na(name2) ~ "b",
    TRUE ~ name3
  ))

但是,在这种情况下,这不起作用,因为我从 name2 调用 NA。 对我有什么建议吗?

【问题讨论】:

  • 您是否只想将names3 的值从a 更改为b
  • 是的,想法是把a改成b,但是替换应该基于一些条件,像这样
  • @Tjn25 提供的代码可以正常工作并提供您所显示的预期输出。您应该提供更好的解释或更好的示例来说明您究竟想要做什么,而不是稍后在 cmets 中解释。
  • 是的,这对我来说是一个很大的模棱两可。谢谢你提醒我。
  • 问题不清楚,例如“这篇文章”和“来自我的问题”是什么意思?

标签: r tidyverse


【解决方案1】:

如果你只想保留f,这个怎么样?

edit 除了ab 将不会被更改。

df %>% 
  mutate(name3 = case_when(
    !(name3 %in% c("a", "b")) ~ name3,
    any(name1 == "a") & is.na(name2) ~ "b",
    TRUE ~ name3
  ))


  name1 name2 name3
1     a     b     b
2     a     b     b
3     a     b     b
4     a     b     b
5     a     c     c
6  <NA>  <NA>     b
7  <NA>  <NA>     b
8  <NA>  <NA>     b
9  <NA>  <NA>     f

【讨论】:

  • ...如果我有很多行包含fe,等等,那么这段代码不能解决它吗?
  • @Anh 你想保留fe 不是ab 吗?请问name3保留的具体条件?
  • 我的意思是name3 列可以有更多不同的值,例如fe,等等。那么调用f 并不是一个理想的选择。
  • @Anh 这就是我要求条件的原因。如果没有 ab 的其他任何内容都不会更改,我编辑上面的代码。
【解决方案2】:

概括解决方案@Tjn25,可以执行以下操作

f <- function(x) ifelse(x == "a", "b", x)

data.frame(lapply(df, f))

【讨论】:

    【解决方案3】:

    如果您只想将 names3 列值 a 更改为 b 那么你可以使用

    df$name3[df$name3 == 'a'] <- 'b'
    

    【讨论】:

    • 不是我想要的,但仍然感谢任何人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2021-05-07
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多