R - 合并包含NA值的同一列数据框

3
我有四个数据框,它们都有相同的列,第一列对所有数据框都相同。在变量列中有些是NAs。
首先,我想要将每个数据框中的任何值(不是NA的值)替换为该数据框的名称。 其次,我想要合并这些数据框。在这种情况下,对于每个NA,会有其他一些数据框具有该值,因此我最终会得到每个单元格都填满值(或数据框的名称)。
以下是两个数据框的示例:
 >A
 name Q  W  E  R  T
 g1   NA NA 4  NA 0
 g2   3  2  NA 4  5
 g3   NA 1  NA 0  0
 g4   0  NA NA 1  9

 >B
 name Q  W  E  R  T
 g1   2  4  NA 1  NA
 g2   NA NA 5  NA NA
 g3   5  NA 0  NA NA
 g4   NA 6  4  NA NA

 >result
 name Q  W  E  R  T
 g1   B  B  A  B  A
 g2   A  A  B  A  A
 g3   B  A  B  A  A
 g4   A  B  B  A  A

我尝试了一些不同的merge()和union()选项。此外,我也试图适应类似问题的答案,但似乎无法解决这个问题。 创建一个函数,用另一个数据框中的值替换NAs 在R中合并带有缺失值的数据框 提前感谢!
2个回答

4
这可能不适用于你,但对于提供的数据而言……
A <- data.frame(Q=c(NA, 3, NA, 0),
                W=c(NA, 2, 1, NA),
                E=c(4, NA, NA, NA),
                R=c(NA, 4, 0, 1),
                T=c(0,5,0,9), row.names=paste0('g', 1:4), stringsAsFactors=FALSE)

B <- data.frame(Q=c(2, NA, 5, NA),
                W=c(4, NA, NA, 6),
                E=c(NA, 5, 0, 4),
                R=c(1, NA, NA, NA),
                T=c(NA, NA, NA, NA), row.names=paste0('g', 1:4), stringsAsFactors=FALSE)

无论何处 A 不是 NA,结果将为 "A"。无论何处 B 不是 NA,结果将为 "B"。

result <- A
result[!is.na(A)] <- "A" 
result[!is.na(B)] <- "B"

#   Q W E R T
#g1 B B A B A
#g2 A A B A A
#g3 B A B A A
#g4 A B B A A

非常感谢!即使在更复杂的数据上也很有效。唯一的问题是它会在第一列(g1、g2...)中引入NA,但由于顺序没有改变,所以只需要从其他数据框之一中放回去即可。 - afrendeiro

4

我为此专门编写了一个包,因为我经常收到那些数据库文盲的人发来的部分重叠的Excel文件。

我已将其上传到CRAN,不久后就可以使用了。接下来要做的是:

> install.packages("datamerge")
> library(datamerge)
> version.merge(A, B, add.values=TRUE)
Rows:  4 from `A` #1
       0 from `B` #2

Columns:
Q  Origin: `A` #1
   Imputed 2 values from `B` #2
W  Origin: `A` #1
   Imputed 2 values from `B` #2
E  Origin: `A` #1
   Imputed 3 values from `B` #2
R  Origin: `A` #1
   Imputed 1 values from `B` #2
T  Origin: `A` #1
   Q W E R T
g1 2 4 4 1 0
g2 3 2 5 4 5
g3 5 1 0 0 0
g4 0 6 4 1 9

如果你想在CRAN上发布之前尝试它,可以从http://www.anst.uu.se/chrba104/datamerge_1.0-1.tar.gz获取。


非常感谢!我应该多花点时间了解这样的包。它完美地运行! 不过,这只回答了我的问题的一半(最大的一半,没错),因为我还想改变内容,所以有了@GSee的答案,我现在可以两者兼顾。 顺便说一下,这个包已经可以从CRAN下载了。 - afrendeiro
此函数的另一个好处是您可以一次合并多个数据框。谢谢! - afrendeiro
不客气!如果没有你的问题,这个软件包仍然会潜藏在我的硬盘上。 - Backlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接