合并数据框并用 R (1 > 0 > NA) 中的多个条件替换值

Merging dataframes and replacing values with multiple conditions in R (1 > 0 > NA)

这是我第一次发帖,所以如果我的行话不正确,我深表歉意。我已经阅读了很多以前的帖子,但仍然无法弄清楚我的合并和替换问题。

我需要用替换合并多个检测历史。这些数据框的大小都相等(80 条记录和 25 列)。每个 sheet 的第 1-12 列描述了站点并包含每个数据框的相同值。第 13-25 列包含给定站点 detection/nondetection 数据的响应变量。检测列中的值可以是 NA、0 或 1。合并时,我需要将 NA 替换为任何 0 或 1 值,并将 0 值替换为任何 1 值。基本上,1 > 0 > NA。

我试图在下面说明我的合并目标。

例如,如果我想 merge/replace 下面的 df1 和 df2...

df1     d1 d2 d3
site1   0  1  1
site2   0  NA NA 
site3   0  0  0
site4   1  NA NA

df2     d1 d2 d3
site1   0  0  NA
site2   0  1  0 
site3   0  0  NA
site4   1  0  NA

我需要结束...

df3     d1 d2 d3
site1   0  1  1
site2   0  1  0 
site3   0  0  0
site4   1  0  NA

非常感谢您提供建议的代码,感谢您的宝贵时间!

给你:

以您的数据框为例:

df1 = data.frame(d1=c(0,0,0, 1), d2=c(1,NA,0,NA), d3=c(1,NA,0,NA))
df2 = data.frame(d1=c(0,0,0, 1), d2=c(0,1,0,0), d3=c(NA,0,NA,NA))

使用这个:

df2[is.na(df2)] = df1[is.na(df2)]
df2[df1>df2 & !is.na(df1)] = df1[df1>df2 & !is.na(df1)]

结果:

> df2
  d1 d2 d3
1  0  1  1
2  0  1  0
3  0  0  0
4  1  0 NA

这将使用 df1 中的值替换 df2 中的所有 NA。然后它会在那些df1较大而不是NA的地方用1替换0。

我想你可以用一个简单的pmax(并行最大值)来得到这个。它最自然地适用于矩阵,而不是数据框。使用@R Schifini 的数据:

pmax(as.matrix(df1), as.matrix(df2), na.rm = T)
#      d1 d2 d3
# [1,]  0  1  1
# [2,]  0  1  0
# [3,]  0  0  0
# [4,]  1  0 NA