添加新观察值并将其与现有观察值关联

时间:2019-07-31 16:34:34

标签: r

我有两个数据帧;一个是我的动物的个人ID代码列表,带有相关的出现日期(31行),另一个是这些人的体重数据日期列表(8474行)。我想计算出出现日期以来每个体重数据行的时间差,以调查每只动物出现后体重的增加。

我想在权重数据框中添加一个新列,该列的出现日期与正确的个人相关联,以便每一行都有个人ID,该个人的出现日期和权重日期。然后,我可以计算出天数差异。

我研究了用于连接数据框的不同方法,但是找不到用于此特定功能的任何方法来关联新数据

emergence date data

weights date data

我想要权重数据中的新列,其中包含每个人的出现日期

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找merge。我制作了与您相似的示例数据框来辅助练习。

EmDates <- as.POSIXct(c("06/28/2019", "06/29/2019", "06/30/2019"), origin = "EST", format = "%m/%d/%Y")
Ind_ID <- c(1,2,3)
Emerg <- as.data.frame(EmDates)
Emerg <- cbind(Emerg, Ind_ID)

Ind_ID <- NULL

WeighDates <- as.POSIXct(c("07/28/2019", "07/29/2019", "07/30/2019"), tz = "EST", format = "%m/%d/%Y")
Ind_ID <- c(3,2,1)
Weigh <- as.data.frame(WeighDates)
Weigh <- cbind(Weigh, Ind_ID)                   

Target_DF <- merge(Emerg, Weigh, by = "Ind_ID")

另外,dplyr join family可以在这里提供帮助,还有更多选择。左联接将所有数据保留在左(第一个)数据帧中,所有匹配的数据保留在右(第二个)数据帧中。上方链接中的其他联接类型将选择不同的数据。

library(dplyr)
EmDates <- as.POSIXct(c("06/28/2019", "06/29/2019", "06/30/2019"), origin = "EST", format = "%m/%d/%Y")
Ind_ID_Emerg <- c(1,2,3)
Emerg <- as.data.frame(EmDates)
Emerg <- cbind(Emerg, Ind_ID_Emerg)


WeighDates <- as.POSIXct(c("07/28/2019", "07/29/2019", "07/30/2019"), tz = "EST", format = "%m/%d/%Y")
Ind_ID_Weigh <- c(3,2,1)
Weigh <- as.data.frame(WeighDates)
Weigh <- cbind(Weigh, Ind_ID_Weigh)                   

Target_DF <- left_join(Emerg, Weigh, by = c("Ind_ID_Emerg" = "Ind_ID_Weigh"))