我有2个数据框。这些如下:
df1
Date Duration
6/27/2014 10.00
6/30/2014 20.00
7/11/2014 15.00
和
df2
Date Percent_Removal
6/27/2014 20.39
6/30/2014 27.01
7/7/2014 49.84
7/11/2014 59.48
7/17/2014 99.04
我想根据'日期'合并这两个数据框。 df1中的列。输出应如下所示:
df3
Date Duration_sum Percent_Removal
6/27/2014 10.00 20.39
6/30/2014 20.00 27.01
7/11/2014 15.00 59.48
我尝试了以下功能:
df1$Date <- as.Date (df1$Date, format= "%m/%d/%Y")
df2$Date <- as.Date (df2$Date, format= "%m/%d/%Y")
df3<- as.data.frame (merge(df1,df2,by.x = "Date",all.x = TRUE))
我的输出是:
DF3
Date Duration_sum Percent_Removal
6/27/2014 10.00 NA
6/30/2014 20.00 NA
7/11/2014 15.00 NA
如果有人可以帮我解决这个问题,我将非常感激。提前谢谢。
答案 0 :(得分:0)
你可能超级懒惰,并且完全避免制作第三个df:
df1$Percent_removal<-df2$Percent_removal[df2$Date==df1$Date]
仅当每个df中每个日期只有1个实例时,这才有效。一个更细微的方法可能是涉及plyr包。
答案 1 :(得分:0)
这对评论来说太长了,但实际上只需要证明我在评论中提供的解决方案确实有效。如果您在合并工作时遇到问题,那么您的数据必然存在其他问题,我们无法诊断这些问题,因为您没有提供数据的输入。
df1 = read.table(text =
"Date Duration
6/27/2014 10.00
6/30/2014 20.00
7/11/2014 15.00",
header = T)
df2 = read.table(text =
"Date Percent_Removal
6/27/2014 20.39
6/30/2014 27.01
7/7/2014 49.84
7/11/2014 59.48
7/17/2014 99.04",
header = T)
df1$Date <- as.Date (df1$Date, format= "%m/%d/%Y")
df2$Date <- as.Date (df2$Date, format= "%m/%d/%Y")
df3 = merge(df1,df2)
# Date Duration Percent_Removal
# 1 2014-06-27 10 20.39
# 2 2014-06-30 20 27.01
# 3 2014-07-11 15 59.48
请注意,不需要在merge语句中指定其他选项,因为
by =
是两个数据框共有的列名。在这种情况下,只共享Date
。all.x
,all.y
和all
提供了所需的行为,其中只保留两个数据框中的行。