基于列更新名称 [英] update names based on columns

查看:0
本文介绍了基于列更新名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想根据两列更新名称

我的示例有3个原始列

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

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

我想更新name3列(甚至新建一个列),如果name1==aname2==NA,则name3中的a字符将被name2列中的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

到目前为止,我使用的是df %>% mutate(name3 = ifelse(name1 == "a" & is.na(name2), "b", name3)),但现在出现了NA。对此有什么建议吗?

推荐答案

基础R

df$name3 <- ifelse(any(df$name1 == "a") & is.na(df$name2), "b", df$name3)

dplyr

library(dplyr)

df %>% 
  mutate(name3 = case_when(
    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

这篇关于基于列更新名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆