我有两个数据框,如下所示:

df1 <- data.frame(time=seq(0.0, by = 0.003, length.out = 1000))

   time
1 0.000
2 0.003
3 0.006
4 0.009
5 0.012
6 0.015
...

df2 <- data.frame(onset=c(0.0, 0.8, 1.9, 2.4), offset=c(0.799, 1.899, 2.399, 3.0))

  onset offset   A   B
1   0.0  0.799 ... ...
2   0.8  1.899 ... ...
3   1.9  2.399 ... ...
4   2.4  3.000 ... ...

实际上,每个数据框中都有更多的列,第一个数据框中的列数更多,而且它们的间隔不规则;第二个数据框中没有太多行。我想合并两个数据帧,以便第一个数据帧中的每一行从第二个数据帧中获得适当范围的额外列,我想有效地完成它,因为涉及数十万行。

最佳答案

您可以使用 findInterval 将时间与相应的 onset 匹配,然后 merge 您的两个 data.frames:

df1$onset <- df2$onset[findInterval(df1$time, df2$onset)]
df3 <- merge(df1, df2, by = "onset")

head(df3)
#   onset  time offset
# 1     0 0.000  0.799
# 2     0 0.003  0.799
# 3     0 0.006  0.799
# 4     0 0.009  0.799
# 5     0 0.012  0.799
# 6     0 0.015  0.799

tail(df3)
#      onset  time offset
# 995    2.4 2.982      3
# 996    2.4 2.985      3
# 997    2.4 2.988      3
# 998    2.4 2.991      3
# 999    2.4 2.994      3
# 1000   2.4 2.997      3

关于r - 通过范围内的成员资格将一个数据框连接到另一个数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10474590/

10-12 17:04