r - 合并 R 中的不同数据帧以消除 NA

标签 r merge tidyverse na

我目前正在使用 R 开发纵向数据库。因此,我有很多缺失值,因为自上次采访以来一直未更改的变量值未添加到新数据库中。例如,在第一波中,性别被定义为男孩或女孩,并且在第一波和第二波之间没有变化,因此他们不会在第二波中再次给出性别。

基本上,我想做的是合并我为第二波选择的数据,并将其与第一波的数据合并,以消除一些 NA。但是,我只想保留我从第二波中选择的专栏。目前,在网上查看后,我只能合并这两个数据集,但不能只保留第二波的数据。

这是我的代码:

library("rqdatatable")

x <- data.frame(
ID = c(1,2,3,4),
S1 = c(1, 3, NA,0),
S2 = c(2, NA, 2,2)
)


y <- data.frame(
ID = c(1, 2, 3, 4,5,6,7,8),
S1 = c(1, 2, 5, 1,3,6,8,2),
S3 = c(3, 3, 3, 3,7,1,6,9),
S2 = c(0,0,0,0,0,0,0,0),
S4 = c(0,0,0,0,0,0,0,0)
)

final <- natural_join(x, y, 
                   by = "ID",
                   jointype = "LEFT")

合并后我想得到的是:

    z = data.frame(
  ID = c(1,2,3,4),
  S1 = c(1, 3, 5,0),
  S2 = c(2, 0, 2,2)
)

您知道如何解决我的问题吗? 合并所有内容并再次选择我想要的变量将非常耗时。

非常感谢和最诚挚的问候!

最佳答案

这是一个基本的 r 函数,它像问题中那样连接数据。它也可以通过管道调用,在这种情况下,R 的管道运算符在 R 4.1 中引入。

x <- data.frame(
  ID = c(1,2,3,4),
  S1 = c(1, 3, NA,0),
  S2 = c(2, NA, 2,2)
)

y <- data.frame(
  ID = c(1, 2, 3, 4,5,6,7,8),
  S1 = c(1, 2, 5, 1,3,6,8,2),
  S3 = c(3, 3, 3, 3,7,1,6,9),
  S2 = c(0,0,0,0,0,0,0,0),
  S4 = c(0,0,0,0,0,0,0,0)
)


joinSpecial <- function(x, y, idcol = "ID"){
  idcolx <- which(names(x) == idcol)
  idcoly <- which(names(y) == idcol)
  idx <- which(names(x) %in% names(y))
  idy <- which(names(y) %in% names(x))
  idx <- idx[idx != idcolx]
  idy <- idy[idy != idcoly]
  i <- match(x[[idcolx]], y[[idcoly]])
  x[idx] <- mapply(\(a, b, i){
    na <- is.na(a)
    a[na] <- b[i][na]
    a
  }, x[idx], y[idy], MoreArgs = list(i = i), SIMPLIFY = FALSE)
  x
}

joinSpecial(x, y)
#>   ID S1 S2
#> 1  1  1  2
#> 2  2  3  0
#> 3  3  5  2
#> 4  4  0  2

x |> joinSpecial(y)
#>   ID S1 S2
#> 1  1  1  2
#> 2  2  3  0
#> 3  3  5  2
#> 4  4  0  2

reprex package 创建于 2022-03-18 (v2.0.1)

关于r - 合并 R 中的不同数据帧以消除 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71531500/

相关文章:

mercurial - 我如何在 Mercurial 中 merge 本地更改(如果有其他更改)?

wpf - 如何在 WPF 中将两个 ObservableCollections 显示为单个列表?

python - Pandas 根据最相似的值合并数据帧

r - 具有固定(文字)字符的矢量化 stringr

r - 是什么导致了 tidyr 警告消息 : "attributes are not identical across measure variables"

r - 如何从 R 中带有列联表的文件中读取维度名称

R:在谷歌搜索一个字符串并返回点击数

r - 按列模式和绑定(bind)行拆分 data.frame R

r - 如何在运行 r 脚本时忽略错误

r - 在用户定义的函数中使用胶水进行变异