R按日期合并多个数据帧,不重复日期

R按日期合并多个数据帧,不重复日期,r,dataframe,datetime,merge,time-series,R,Dataframe,Datetime,Merge,Time Series,我有两个数据框,它们分别包含日期列和数值列。我想按日期合并数据,这样我得到3列:一个日期和两个相应的值。当我把这些数据合并在一起时,结果是重复的日期和一些看似随机的值。我尝试了一些不同的合并(all=T,all.x=T等)以及左键连接,但没有成功。我做错了什么 现在我只合并两个表,但我确实需要合并其中的许多表,结果是每个日期都有许多关联的值 > library(tidyverse) > GR_Raw <- read.csv("Daily__Jul-16-2020_0

我有两个数据框,它们分别包含日期列和数值列。我想按日期合并数据,这样我得到3列:一个日期和两个相应的值。当我把这些数据合并在一起时,结果是重复的日期和一些看似随机的值。我尝试了一些不同的合并(all=T,all.x=T等)以及左键连接,但没有成功。我做错了什么

现在我只合并两个表,但我确实需要合并其中的许多表,结果是每个日期都有许多关联的值

> library(tidyverse)

> GR_Raw <- read.csv("Daily__Jul-16-2020_02_15_56AM.csv", sep = ",")
> names(GR_Raw)[1] <- "id"    
> GR_02GB001 <- filter(GR_Raw, id == "02GB001")
> GR_02GA003 <- filter(GR_Raw, id == "02GA003")
>
> GR_02GB001 <- data.frame(GR_02GB001$Date, GR_02GB001$Value)
> names(GR_02GB001) <- c("Date", "02GB001")
> 
> GR_02GA003 <- data.frame(GR_02GA003$Date, GR_02GA003$Value)
> names(GR_02GA003) <- c("Date","02GA003")

> GR_02GB001$Date <- as.Date(GR_02GB001$Date , format = "%Y/%m/%d")
> GR_02GA003$Date <- as.Date(GR_02GA003$Date , format = "%Y/%m/%d")

> GR_All <- merge(GR_02GB001, GR_02GA003, all=T)
> GR_Left <- left_join(GR_02GB001, GR_02GA003, by = "Date")
我想要的是:

Date 02GB001 02GA003
2019-12-26   0.386   0.802
2019-12-27   0.398   0.817
2019-12-28   0.459   0.899
2019-12-29   0.593   0.943
2019-12-30   0.805   1.279
2019-12-31   1.095   1.461
谢谢

编辑
是我的数据,我尝试了多次,得到了相同的错误结果。我的原始帖子已经使用了唯一的建议答案。

通过上传的数据,我可以提出建议。有时您每天有一条以上的记录(请参见下面示例中的
df1
),然后,当您使用
all=TRUE
选项合并数据帧时,这些记录将被保留,并且来自
df2
的相应记录的值将被复制

# df1 has two records (or two lines) the 1999/01/01
df1 = data.frame(Date = c(as.Date('1999/01/01'),seq(as.Date('1999/01/01'), as.Date('1999/01/15'), by="day")),
                 var1 = c(1:16))
df2 = data.frame(Date = seq(as.Date('1999/01/01'), as.Date('1999/01/15'), by="day"),
                 var2 = runif(15))
df_all = merge(df1, df2, by = "Date", all = T) # both records from df1 1999/01/01 are still there and the related value from df2 is duplicated
旧答案

我试图模仿你的问题,但我没有这样的问题。 请考虑这个可重复的例子:

# Ex datasets with 5 days in common
df1 = data.frame(Date = seq(as.Date('1999/01/01'), as.Date('1999/01/15'), by="day"),
                var1 = runif(15))
df2 = data.frame(Date = seq(as.Date('1999/01/10'), as.Date('1999/01/30'), by="day"),
                 var2 = runif(21))
# merging by dates I get the expected output with df1 and df2
df_merge = merge(df1, df2, by = "Date", all = T)

# merging with dataframes having the same set of dates
df3 = data.frame(Date = seq(as.Date('1999/01/01'), as.Date('1999/01/15'), by="day"),
                 var3 = runif(15))
df_merge2 = merge(df1, df3, by = "Date", all = T)
这是输出;正如预期的那样,我们有30行和15行,必要时
NA

> str(df_merge)
'data.frame':   30 obs. of  3 variables:
 $ Date: Date, format: "1999-01-01" "1999-01-02" "1999-01-03" "1999-01-04" ...
 $ var1: num  0.0646 0.7934 0.6965 0.1142 0.0527 ...
 $ var2: num  NA NA NA NA NA ...
> str(df_merge2)
'data.frame':   15 obs. of  3 variables:
 $ Date: Date, format: "1999-01-01" "1999-01-02" "1999-01-03" "1999-01-04" ...
 $ var1: num  0.0646 0.7934 0.6965 0.1142 0.0527 ...
 $ var3: num  0.000744 0.350087 0.429771 0.18886 0.484449 ...

谢谢,我知道这是它的工作原理,但我无法用我的数据实现它。我附加了一个链接到我的数据,如果你想查看它。我仍然无法将其正确合并。我正在处理您的数据,似乎您每天有多条记录。查看
length(unique(GR_02GB001$Date))
和to
length(GR_02GB001$Date)
@Jason如果更新的答案对您有帮助,请告诉我。非常感谢!我现在明白这个问题了。这有助于lotPlease重新打开,我已经包含了所有11行用于重现这些结果的代码,以及指向所用数据的链接。
> str(df_merge)
'data.frame':   30 obs. of  3 variables:
 $ Date: Date, format: "1999-01-01" "1999-01-02" "1999-01-03" "1999-01-04" ...
 $ var1: num  0.0646 0.7934 0.6965 0.1142 0.0527 ...
 $ var2: num  NA NA NA NA NA ...
> str(df_merge2)
'data.frame':   15 obs. of  3 variables:
 $ Date: Date, format: "1999-01-01" "1999-01-02" "1999-01-03" "1999-01-04" ...
 $ var1: num  0.0646 0.7934 0.6965 0.1142 0.0527 ...
 $ var3: num  0.000744 0.350087 0.429771 0.18886 0.484449 ...