【问题标题】:merge 2 columns with if-else in r [duplicate]在r中将2列与if-else合并[重复]
【发布时间】:2017-05-15 17:41:41
【问题描述】:

我在这样的数据框中有 2 列

name1     name2
 <NA>      SAM
 JIM       <NA>
 <NA>      <NA>

我正在尝试获得这样的合并列

name1     name2      name3
 <NA>      SAM        SAM
 JIM       <NA>       JIM
 <NA>      <NA>       <NA>

我想拥有name3 列中的name1name2 中的任何一个值,以不是NA 为准。

我尝试过使用

df %>% mutate( name3 = ifelse( is.na(name1), name2, name1) )

我阅读了有关 ifelse() 的帖子,它返回逻辑向量的大小作为输入 here

df %>% mutate( name3 = ifelse( is.na(name1), return(name2), return(name1)) )

但我仍然得到 1 作为输出 - 不知道为什么。

【问题讨论】:

    标签: r if-statement dplyr


    【解决方案1】:

    我们可以使用dplyr中的coalesce(假设列是character类)

    library(dplyr)
    df1 %>% 
        mutate(name3 = coalesce(name1, name2))
    #    name1 name2 name3
    #1  <NA>   SAM   SAM
    #2   JIM  <NA>   JIM
    #3  <NA>  <NA>  <NA>
    

    得到 1 的原因是因为列是 factor。将列类更改为characterifelse 应该可以正常工作

    df1 %>% 
       mutate_all(as.character) %>% 
       mutate(name3 = ifelse(is.na(name1), name2, name1)) 
    #  name1 name2 name3
    #1  <NA>   SAM   SAM
    #2   JIM  <NA>   JIM
    #3  <NA>  <NA>  <NA>
    

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 2019-03-04
      • 2012-12-29
      • 2020-11-23
      • 2015-06-20
      • 2011-05-23
      • 2010-12-10
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多