【问题标题】:Renaming title of column containing date values重命名包含日期值的列的标题
【发布时间】:2017-05-11 07:51:40
【问题描述】:

我有一个专栏:

       id  father  mother sex  birthdate.x birthdate.y
1    john       0       0   1      <NA>         NA
2    mari       0       0   2      01/01/1996   NA
3    paul       0       0   2      <NA>      01/01/1995
4    ralf       0       0   2      <NA>         NA
5    kimb       0       0   2      01/01/1997   NA

而且每次我用它“合并”birthdate.xbirthdate.y 时,它都会给我一个简单的数字。

df1$birthdate.x <- ifelse(is.na(df1$birthdate.y), df1$birthdate.x, df1$birthdate.y)
df1$birthdate.y <- NULL
names(df1)[names(df1)=="birthdate.x"] <- "birthdate"

       id     father  mother sex  birthdate
1    john     0       0      1    NA
2    mari     0       0      2    2
3    paul     0       0      2    1
4    ralf     0       0      2    NA
5    kimb     0       0      2    3

【问题讨论】:

  • ifelse 失去属性;在这种情况下,因子标签。将两者都转换为字符,它将起作用。 (具有讽刺意味的是,如果你转换为 Date 类,你也会遇到同样的问题。)
  • 我怎样才能转换成字符?
  • df1$birthdate.x &lt;- as.character(df1$birthdate.x) 并重复birthdate.y,或直接在ifelse 中执行,即df1$birthdate &lt;- ifelse(is.na(df1$birthdate.y), as.character(df1$birthdate.x), as.character(df1$birthdate.y))
  • 另外,请确保您的 NAs 实际上是 NA 而不是因子级别或字符串;查看str(df1) 看看你有什么(以及为什么两列之间的打印不一致)。
  • 谢谢老哥,成功了!我欠你一夜好眠哈哈哈哈哈哈

标签: r merge rename


【解决方案1】:

我们可以通过pmax 做到这一点

transform(df1, birthdate = pmax(as.character(birthdate.x), 
           as.character(birthdate.y), na.rm = TRUE))[-(5:6)]
#    id father mother sex  birthdate
#1 john      0      0   1       <NA>
#2 mari      0      0   2 01/01/1996
#3 paul      0      0   2 01/01/1995
#4 ralf      0      0   2       <NA>
#5 kimb      0      0   2 01/01/1997

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 2021-12-07
    • 1970-01-01
    • 2014-10-28
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多