我想合并两个重复测量的数据帧。它们都有这样的格式,不同之处在于第一个有观察1,而另一个有观察2。
Location Date Time observation1
1 1/1/2000 6:00 20
1 1/1/2000 7:00 14
1 1/1/2000 8:00 35
1 1/2/2000 6:00 20
1 1/2/2000 7:00 14
1 1/2/2000 8:00 35
2 1/1/2000 6:00 10
2 1/1/2000 7:00 14
2 1/1/2000 8:00 45
2 1/2/2000 6:00 30
2 1/2/2000 7:00 24
2 1/2/2000 8:00 35
.
.
100 10/31/2000 6:00 80
100 10/31/2000 7:00 80
100 10/31/2000 8:00 80
我想对特定日期和时间的每个位置进行处理,观察1和观察2可以匹配。
我计划使用for循环来执行此操作,这意味着我从dataframe1中选择一行,将其与dataframe2匹配,然后从dataframe1中选择另一行并反复执行。但由于数据帧都有数百万行,因此速度非常慢。
有人能提出更有效的方法吗?谢谢!
答案 0 :(得分:0)
关注,@安娜泰勒 直接的方法是使用Merge:一个可重现的例子如下:
Location = c(1,1,2,3,4,1)
Date1 = c(as.Date("2014-01-01"), as.Date("2000-01-01"), as.Date("2005-01-01"), as.Date("2001-12-01"), as.Date("2001-11-01"), as.Date("2001-10-01"))
Time1 = c(20,30,40,50,60,70)
Observation1 = c(1,2,3,4,5,6)
Date2 = c(as.Date("2014-10-01"), as.Date("2001-01-01"), as.Date("2005-01-01"), as.Date("2001-12-01"), as.Date("2001-11-01"), as.Date("2001-10-01"))
Time2 = c(20,20,40,50,50,70)
Observation2 = c(7,8,9,10,11,12)
data1 = data.frame(Location = Location, Date = Date, Time = Time, Observation1 = Observation1)
data2 = data.frame(Location = Location, Date = Date2, Time = Time2, Observation2 = Observation2)
merge(data1,data2, by = c("Date", "Time", "Location"))
那将返回:
Date Time Location Observation1 Observation2
1 2001-10-01 70 1 6 12
2 2001-12-01 50 3 4 10
3 2005-01-01 40 2 3 9