我有两个数据框架。第一个的结构如下:
time transactID itemID order salesPrice day
1: 2018-01-01 00:01:56 2278968 450 1 17.42 2018-01-01
2: 2018-01-01 00:01:56 2278968 83 1 5.19 2018-01-01
3: 2018-01-01 00:07:11 2255797 7851 2 20.47 2018-01-01
4: 2018-01-01 00:09:24 2278968 450 1 17.42 2018-01-01
5: 2018-01-01 00:09:24 2278968 83 1 5.19 2018-01-01
6: 2018-01-01 00:39:26 2257125 9375 1 31.02 2018-01-01
7: 2018-01-01 00:51:59 2278968 450 1 17.42 2018-01-01
8: 2018-01-01 00:51:59 2278968 83 1 5.19 2018-01-01
9: 2018-01-01 00:51:59 2278968 19 1 77.64 2018-01-01
10: 2018-01-01 00:51:59 2278968 297 1 43.53 2018-01-01
11: 2018-01-20 00:51:59 2278968 297 1 43.53 2018-01-20 HERE
...
第二个是这样的结构:
day
<date>
1 NA
2 2018-07-13
3 2018-07-01
4 2018-07-02
5 2018-07-05
6 2018-07-11
7 2018-07-04
8 2018-07-08
9 2018-07-09
10 2018-06-30
11 2018-07-06
12 2018-07-10
13 2018-07-03
14 2018-07-12
15 2018-07-07
16 2018-01-20 HERE
我想要达到的输出:
time transactID itemID order salesPrice day prom
1: 2018-01-01 00:01:56 2278968 450 1 17.42 2018-01-01 ""
2: 2018-01-01 00:01:56 2278968 83 1 5.19 2018-01-01 ""
3: 2018-01-01 00:07:11 2255797 7851 2 20.47 2018-01-01 ""
4: 2018-01-01 00:09:24 2278968 450 1 17.42 2018-01-01 ""
5: 2018-01-01 00:09:24 2278968 83 1 5.19 2018-01-01 ""
6: 2018-01-01 00:39:26 2257125 9375 1 31.02 2018-01-01 ""
7: 2018-01-01 00:51:59 2278968 450 1 17.42 2018-01-01 ""
8: 2018-01-01 00:51:59 2278968 83 1 5.19 2018-01-01 ""
9: 2018-01-01 00:51:59 2278968 19 1 77.64 2018-01-01 ""
10: 2018-01-01 00:51:59 2278968 297 1 43.53 2018-01-01 ""
11: 2018-01-20 00:51:59 2278968 297 1 43.53 2018-01-20 "*"
...
我的目标是创建一个名为prom的新列这标志着匹配的日期。例如,我在第一列和第二列之间匹配day2018-01-20
(参见示例),那么它应该在新列中标记该日期,例如用星号(*)。不匹配的行应该用空填充""
我尝试的是这样的东西(没有工作,只是为了我想要完成的想法):
df1$prom <- ifelse(df1$day %in% df2$day, "*","")
复制代码(不包含匹配日期):
第一df
structure(list(time = structure(c(1514764916, 1514764916, 1514765231,
1514765364, 1514765364, 1514767166, 1514767919, 1514767919, 1514767919,
1514767919, 1514767919, 1514767919, 1514768104, 1514768214, 1514768214,
1514768214, 1514768214, 1514768214, 1514768214, 1514770106, 1516406400
), tzone = "UTC", class = c("POSIXct", "POSIXt")), transactID = c(2278968,
2278968, 2255797, 2278968, 2278968, 2257125, 2278968, 2278968,
2278968, 2278968, 2278968, 2278968, 2255111, 2278968, 2278968,
2278968, 2278968, 2278968, 2278968, 2255111, 2255111), itemID = c(450,
83, 7851, 450, 83, 9375, 450, 83, 19, 297, 295, 109, 2049, 19,
83, 295, 297, 450, 109, 4322, 4322), order = c(1, 1, 2, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), salesPrice = c(17.42,
5.19, 20.47, 17.42, 5.19, 31.02, 17.42, 5.19, 77.64, 43.53, 37.79,
5.8, 35.75, 77.64, 5.19, 37.79, 43.53, 17.42, 5.8, 22.86, 22.86
), day = structure(c(17532, 17532, 17532, 17532, 17532, 17532,
17532, 17532, 17532, 17532, 17532, 17532, 17532, 17532, 17532,
17532, 17532, 17532, 17532, 17532, 17551), class = "Date")), row.names = c(NA,
-21L), class = c("data.table", "data.frame"))
第二dfstructure(list(day = structure(c(NA, 1531440000, 1530403200,
1530489600, 1530748800, 1531267200, 1530662400, 1531008000, 1531094400,
1530316800, 1530835200, 1531180800, 1530576000, 1531353600, 1530921600,
1516402800), tzone = "", class = c("POSIXct", "POSIXt"))), row.names = c(NA,
-16L), class = c("tbl_df", "tbl", "data.frame"))
不确定这是否是您正在寻找的。你能告诉我们你期望的结果是什么吗?
df2$prom <- "*"
library(tidyverse)
left_join(df1, df2) %>%
mutate(prom = replace_na(prom, ""))