【发布时间】:2018-09-29 00:16:02
【问题描述】:
我有两个数据集,“Df_A”和“Df_B”:
Df_A
Date Info A Info B
9/19/18 23:00 36 48
9/18/18 23:00 47 30
9/17/18 23:00 51 3
8/14/18 23:00 45 16
8/6/18 23:00 37 13
8/5/18 23:00 42 66
7/11/18 23:00 42 53
7/4/18 23:00 38 10
Df_B
Released Info Event Value X
9/6/2018 22:30 Event A 51.8
8/6/2018 22:30 Event A 52
7/5/2018 22:30 Event A 50.6
6/6/2018 22:30 Event A 54
9/2/2018 22:30 Event C 48
7/31/2018 22:30 Event C 45
9/4/2018 22:30 Event D 58.7
8/2/2018 22:30 Event D 56.2
7/3/2018 22:30 Event D 57.3
6/4/2018 22:30 Event D 51.1
5/2/2018 22:30 Event D 54.2
4/4/2018 22:30 Event D 59.8
9/3/2018 1:30 Event E 61.8
8/6/2018 1:30 Event E 63
7/2/2018 1:30 Event E 65.2
“日期”和“Released.info”都是因素。
我有一个向量“Events”,其中包含我需要解析的“Df_B”中的事件,例如
Events <- c("Event A", "Event D")
对于“Df_B”中的每个“事件”,我想检查“Df_A”中的“日期”是否大于“Df_B”中的“发布信息”。如果是这样,我想将'Event A'和'Event B'的对应值添加到'Df_A'中。
想要的输出:
Date Info A Info B Event A Event D
9/19/18 23:00 36 48 51.8 58.7
9/18/18 23:00 47 30 51.8 58.7
9/17/18 23:00 51 3 51.8 58.7
8/14/18 23:00 45 16 52 56.2
8/6/18 23:00 37 13 52 56.2
8/5/18 23:00 42 66 50.6 56.2
7/11/18 23:00 42 53 50.6 57.3
7/4/18 23:00 38 10 54 57.3
例如,对于“Df_A”中的 9/19/18 23:00、9/18/18 23:00 和 9/17/18 23:00,“事件 A”组的“Df_B”中最接近的先前日期是 9/6/2018 22:30。因此,对于这些行,我们从“Df_B”中选择值 51.8。 Df_A 中的所有日期,以及“Df_B”中的“事件 A”和“事件 B”,依此类推。
我想向“Df_A”添加新的 n 列,在本例中为“事件 A”和“事件 D”,但可能更多。
为此,我一直在尝试使用类似这样的方式为动态事件量创建一些动态变量(因为事件来自 csv 作为矩阵):
#To Create a variable for each Event
ListEvents <- as.list(as.vector(Events))
names(ListEvents) <- paste("Variable", 1:length(ListEvents), sep = "")
list2env(ListEvents,envir = .GlobalEnv)
为每个事件创建一个变量后,我正在考虑创建一个循环,这样我就可以为每个事件创建一个子集,然后将日期 (Df_A) 与发布日期(Df_B) 进行比较,并将其添加为 Df_A 中的列.但我知道这是一种不必要的复杂和低效的方法。有人可以帮我吗?
【问题讨论】: