R:合并2个数据帧,并在前一行和后一行进行索引

Hachondeoro

可以说我有一个像这样的数据集:

origin=data.frame(Date=as.Date(c("2016-08-05","2016-08-04","2016-08-03")),
                  L=c(1,2,3),
                  Type=c("H","L","H"))

        Date L Type
1 2016-08-05 1    H
2 2016-08-04 2    L
3 2016-08-03 3    H

end=data.frame(Date=as.Date(c("2016-08-05","2016-08-04","2016-08-03","2016-08-02","2016-08-01")),
               N=c(50,40,30,20,10),
               Name=c("CA","CB","CC","CD","CE"),
               Vol=c(2,1,2,2,3),
               Act=c(0.1,0.2,0.3,0.2,0.2))

        Date  N Name Vol Act
1 2016-08-05 50   CA   2 0.1
2 2016-08-04 40   CB   1 0.2
3 2016-08-03 30   CC   2 0.3
4 2016-08-02 20   CD   2 0.2
5 2016-08-01 10   CE   3 0.2

我想要这样的东西:

        Date L Type  N Name Vol Act
3 2016-08-05 1    H 50   CA   2 0.1
3 2016-08-05 1    H 40   CB   1 0.2
3 2016-08-05 1    H 30   CC   2 0.3
2 2016-08-04 2    L 40   CB   1 0.2
2 2016-08-04 2    L 30   CC   2 0.3
2 2016-08-04 2    L 20   CD   2 0.2
1 2016-08-03 3    H 30   CC   2 0.3
1 2016-08-03 3    H 20   CD   2 0.2
1 2016-08-03 3    H 10   CE   3 0.2

我想保留“起源”的原始列日期,在合并中,我想将其与“结束”的当前日期和以前的日期值(两个先前的值)合并,就像用循环合并一样。在其他帖子中,仅匹配公共值,这将给出3行结果:

merge(x = origin, y = end, by = "Date")

        Date L Type  N Name Vol Act
1 2016-08-03 3    H 30   CC   2 0.3
2 2016-08-04 2    L 40   CB   1 0.2
3 2016-08-05 1    H 50   CA   2 0.1

这是非常不同的,并且不会按当前行和上一行的值合并两个数据帧,因此我无法弄清楚该如何进行。

智慧

看起来像是foverlapsdata.table对这份工作西装:

# prepare data and add extra columns for foverlaps join which relies on columns instead of one
library(data.table)
setDT(origin)[, DateStart := Date - 2]
setDT(end)[, DateStart := Date]
setkey(origin, DateStart, Date)

# join two tables with foverlaps and remove subsidiary columns
foverlaps(end, origin, type = "within")[, `:=` (DateStart = NULL, i.Date = NULL, i.DateStart = NULL)][order(Date)]

#          Date L Type  N Name Vol Act
# 1: 2016-08-03 3    H 30   CC   2 0.3
# 2: 2016-08-03 3    H 20   CD   2 0.2
# 3: 2016-08-03 3    H 10   CE   3 0.2
# 4: 2016-08-04 2    L 40   CB   1 0.2
# 5: 2016-08-04 2    L 30   CC   2 0.3
# 6: 2016-08-04 2    L 20   CD   2 0.2
# 7: 2016-08-05 1    H 50   CA   2 0.1
# 8: 2016-08-05 1    H 40   CB   1 0.2
# 9: 2016-08-05 1    H 30   CC   2 0.3

或使用version的non-equi加入功能data.table1.9.7

setDT(origin)[, `:=` (DateEnd = Date, StartDate = Date - 2)]
             [setDT(end), on = .(DateEnd >= Date, StartDate <= Date), allow = T]

#          Date L Type    DateEnd  StartDate  N Name Vol Act
# 1: 2016-08-05 1    H 2016-08-05 2016-08-05 50   CA   2 0.1
# 2: 2016-08-04 2    L 2016-08-04 2016-08-04 40   CB   1 0.2
# 3: 2016-08-05 1    H 2016-08-04 2016-08-04 40   CB   1 0.2
# 4: 2016-08-03 3    H 2016-08-03 2016-08-03 30   CC   2 0.3
# 5: 2016-08-04 2    L 2016-08-03 2016-08-03 30   CC   2 0.3
# 6: 2016-08-05 1    H 2016-08-03 2016-08-03 30   CC   2 0.3
# 7: 2016-08-03 3    H 2016-08-02 2016-08-02 20   CD   2 0.2
# 8: 2016-08-04 2    L 2016-08-02 2016-08-02 20   CD   2 0.2
# 9: 2016-08-03 3    H 2016-08-01 2016-08-01 10   CE   3 0.2

删除辅助列应该很简单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将数据帧中的每一行与 r 中另一个数据帧中的每一行进行匹配

将一个数据帧中的每一行与tidyverse中另一行的每一行进行比较

如何将数据帧1的每一行与数据帧2的每一行进行比较?

如何根据行的排序值对pandas数据帧的每一行进行排序并返回列索引

条件数据标签与上一行和下一行进行比较

Python Pandas合并两个数据帧,并将一个数据帧的一行映射到另一数据帧的所有行

如何将一个数据帧中的一行的值与另一个数据帧中的多个行进行比较(包括计算)

在R中打印合并数据帧的每一行

将一个数据框的一行与其他数据框的行进行比较?

在2个数据帧的每一行中查找常用词(交集)

在R中,如何根据值所属的bin对数据帧的每一行进行分类?

关于联接2个数据帧的指南,以使df2的每一行成为df1的整个列,并在df2的所有行上进行迭代

如何在python中对pandas数据帧的每一行进行计算?

有条件地对数据帧的每一行进行计数

比较两个数据帧并在pyspark中返回一行的结果

如何对熊猫数据框中的每一行进行排序并获取索引?

查找一个数据帧中的一行出现在R中的另一个数据帧中的时间

根据第一行和最后一行比较和过滤两个数据帧

ggplot2和一行中的第一个数据点

如何对熊猫数据框的一行进行排序

在R中从另一个数据帧中查找信息后,如何对每一行应用操作

如何合并数据帧中的行以在R中每个唯一ID有一行

如何将一个数据框的每一行与另一数据框的所有行进行比较并计算距离度量?

根据同一行和后一行的另一列中的值创建一个数据框列

awk 或 sed:如何根据上一行和下一行进行修改

如何在python中左联接2个数据帧,如果过滤后第二个数据帧中有多个匹配行,则与第一行联接

将数据框中的每一行与另一个数据框中的多行进行比较并获得结果

根据R中某个值之上的每一行从一个数据帧创建多个数据帧

如何将每一行与所有其他行进行比较,如果相同,我将连接到一个新的数据帧?Python