合并两个(混乱的)数据集

Merging two (messy) datasets

我有两个数据集,每个数据集都包含相同的列。第一列是名称,然后是其他一些特征。

许多数据丢失,空元素,但所有名称都在那里。

我想合并列表,删除重复信息但保留所有信息

示例: 第一个数据集

Name V1 V2
A    2   3
B        9

第二个数据集

Name V1 V2
A        3
B    4   9
C    18

这是我在卡住之前走了多远:

S1=read.xlsx2("... /Exercise_Data_Week_2.xlsx", sheetName = "Sheet1") 
S2=read.xlsx2("... /w2/Exercise_Data_Week_2.xlsx", sheetName = "Sheet2") 

alldata=rbind(S1,S2)  #18305 obs
MName <- unique(alldata["Name"]) #13738 obs

编辑:合并后所需的数据集是(正如上校猜测的那样)

#   Name V1 V2
#1:    A  2  3
#2:    B  4  9
#3:    C 18 NA

EDIT2:请注意,这不是我正在使用的数据,它是一个非常简化的版本。所以我正在寻找一种可推广的方式...

注意:这是来自 MOOC EX101x 数据分析的 Excel 练习:将其带到 MAX()。我正在花时间在 R 中做这件事(一开始它要难得多,但我相信 long-运行 我会用 R 节省时间)。该课程是开放且免费的,所以我想我可以 post 练习的数据:https://courses.edx.org/c4x/DelftX/EX101x/asset/Exercise_Data_Week_2.xlsx

这是一个基于 R 的解决方案:

df1 <- data.frame(Name=c('A','B'), V1=c(2,NA), V2=c(3,9) );
df2 <- data.frame(Name=c('A','B','C'), V1=c(NA,4,18), V2=c(3,9,NA) );
aggregate(.~Name, rbind(df1,df2), function(v) na.omit(v)[1], na.action=NULL );
##   Name V1 V2
## 1    A  2  3
## 2    B  4  9
## 3    C 18 NA

此解决方案假设如果两个输入之间存在重复的非 NA 值 data.frames,则始终可以接受其中的第一个。