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

时间:2015-04-14 21:13:31

标签: r data-manipulation

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

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

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

实施例: 第一个数据集

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中(在开始时它会更难,但我相信从长远来看,我会节省R的时间)。该课程是开放和免费的,所以我想我可以发布练习的数据:https://courses.edx.org/c4x/DelftX/EX101x/asset/Exercise_Data_Week_2.xlsx

1 个答案:

答案 0 :(得分:1)

这是基础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

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