【问题标题】:Joining the data in two columns into one column in R将两列中的数据合并为R中的一列
【发布时间】:2013-02-11 12:42:32
【问题描述】:

合并两个单独的数据集后,我在一个数据集中有两列。我想将这些列合并为一列,BNR.x。

对于下面列出的情况,我的首选结果是:
1. 什么都没有。 BNR.x 有数据,没关系。
2. 什么都没有。两列中的数据相同,没关系。
3. 将 BNR.y 中的数据复制到 BNR.x
4. 什么都没有。同2。
5. 列中的数据不同。最好我会在这一行中得到一个带有 FALSE 1 的额外列作为警告。
6. 没有数据。最好我也会在这里收到警告,通知我我没有此项目的任何数据。

+----+-------+-------+
| ID | BNR.x | BNR.y |
+----+-------+-------+
|  1 | 123   | NA    |
|  2 | 234   | 234   |
|  3 | NA    | 345   |
|  4 | 456   | 456   |
|  5 | 678   | 677   |
|  6 | NA    | NA    |
+----+-------+-------+

有什么方法或包可以帮我做这件事吗?

【问题讨论】:

    标签: r join merge


    【解决方案1】:

    这是一个建议。 dat是数据框的名称:

    idx <- is.na(dat$BNR.x) # create logical index for NAs in BNR.x
    
    dat$BNR.x[idx] <- dat$BNR.y[idx] # replace NAs with values from BNR.y
    
    # Add a logical column:
    dat <- transform(dat, warn = is.na(BNR.x) | (BNR.x != BNR.y & !is.na(BNR.y)))
    

    结果:

      ID BNR.x BNR.y  warn
    1  1   123    NA FALSE
    2  2   234   234 FALSE
    3  3   345   345 FALSE
    4  4   456   456 FALSE
    5  5   678   677  TRUE
    6  6    NA    NA  TRUE
    

    【讨论】:

      【解决方案2】:

      如果您的数据位于名为d 的数据框中,您可以这样做:

      ## Copy BNR.y if BNR.x is missing
      d$BNR.x[is.na(d$BNR.x)] <- d$BNR.y[is.na(d$BNR.x)]
      ## List the indices of BNR.x that are still missing
      which(is.na(d$BNR.x))
      ## List the indices where BNR.x is different from BNR.y
      which(d$BNR.x != d$BNR.y)
      

      【讨论】:

      • 感谢您的帮助,但是当我尝试将缺失值从 y 复制到 x 时,R 给了我以下错误:警告消息:在 [&lt;-.factor(*tmp*,is.na(a$ IID.x), value = c(4L, 46L, 50L, : 要替换的项目数不是替换长度的倍数
      • @Xizam 抱歉,我的代码有错误。现在应该没问题了。
      【解决方案3】:

      发件人:

      df
      V1  V2  V3
      1  1 123  NA
      ...
      
      df[which(is.na(df$V2)),]$V2 <- df[which(is.na(df$V2)),]$V3
      df$warn <- 0
      df[which(is.na(df$V2)),]$warn <- 1
      df[which(df$V2 != df$V3 & !is.na(df$V3)),]$warn <- 1
      

      好的,过度使用 which 和 transform 更好,但我必须从某个地方开始 :)

      ps。我错了还是

      d$BNR.x[is.na(d$BNR.x)] <- d$BNR.y
      

      不会工作,因为它会将“错误对齐”的 BNR$y 值与 BNR$x NA 相对应?

      【讨论】:

      • 你说得对,d$BNR.y应该换成d$BNR.y[is.na(d$BNR.x)]
      猜你喜欢
      • 1970-01-01
      • 2018-05-25
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      相关资源
      最近更新 更多