将每个日期具有一个值的数据框与每个日期具有多个条目的数据框组合

时间:2019-11-11 14:01:35

标签: r date dataframe

我想合并两个数据框。 DF2每天有一个温度值,而DF1每天有数个条目。因此,我想在DF2中查找一天的温度,并将其添加到数据框1中这一天的每个条目中。

我猜想循环会最有效,但是对于R来说还是一个新手,我无法弄清楚它的外观

DF1$Date<-c(1.8.18, 1.8.18, 2.8.18)
DF2$Date<-c(1.8.18, 2.8.18, 3.8.18)
DF2$Temperature<-c(17,18,17)
DF2$Difference<-c(0.5,0.4,0.5)

这是预期的输出:

DF1$Date<-c(1.8.18, 1.8.18, 2.8.18)
DF1$Temperature<-c(17,17,18)
DF1$Difference<-c(0.5,0.5,0.4)

2 个答案:

答案 0 :(得分:2)

我强烈建议使用tidyverse库进行常规数据处理(并使用lubridate进行日期处理,尽管您不一定需要对此问题进行lubridate)。

这可能适合您的情况:

library(tidyverse)

# Create the dataframes
DF1 <- data.frame(c("1.8.18", "1.8.18", "2.8.18"))
DF2 <- data.frame(c("1.8.18", "2.8.18", "3.8.18"),
                  c(17,18,17),
                  c(0.5,0.4,0.5)
                  )
names(DF1) <- "Date"
names(DF2) <- c("Date", "Temperature", "Difference")

#### OUTPUT ####
> DF1
#    Date
# 1 1.8.18
# 2 1.8.18
# 3 2.8.18

> DF2
#     Date Temperature Difference
# 1 1.8.18          17        0.5
# 2 2.8.18          18        0.4
# 3 3.8.18          17        0.5

所以上面我只是重新创建了您的数据框。 DF1只有一列,DF2只有3列。

# join dataframes by what the "Date" columns have in common

left_join(x = DF1, y = DF2, by = "Date")

这应该得到您的预期输出。

> DF3
#     Date Temperature Difference
# 1 1.8.18          17        0.5
# 2 1.8.18          17        0.5
# 3 2.8.18          18        0.4

有关更多详细信息,请查看dplyr(属于dydyverse库的一部分)中的join function

答案 1 :(得分:0)

我可以将您的Date变量用作日期变量或字符变量。为此,我不会将其用作因子变量

library(tidyverse)
DF1$Date = as.Date(DF1$Date, "%d.%m.%y") 
DF2$Date= as.Date(DF2$Date, "%d.%m.%y") 
left_join(x = DF1, y = DF2, by = "Date")

OR

DF1$Date = as.character(DF1$Date)
DF2$Date = as.character(DF2$Date)
left_join(x = DF1, y = DF2, by = "Date")

将其用作一个因素,您将收到一条错误消息,并且有很大的机会将其弄错,