我想合并两个数据框。 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)
答案 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")
将其用作一个因素,您将收到一条错误消息,并且有很大的机会将其弄错,