【发布时间】:2016-01-23 22:19:18
【问题描述】:
我可以删除两个数据帧 df1 和 df2 之间匹配的行,并使用@Eric Fail 提供的一些代码:
df1[!(apply(df1[1:2], 1, toString) %in% apply(df2[1:2], 1, toString)), ]
或使用@steveb 提供的dplyr 解决方案
df1 %>% filter( ! ((date == df2$date) & (ticker == df2$ticker)) )
但是,我意识到我不仅需要像这样删除共享行:
df1 <- data.frame(ticker = c("MSFT", "MSFT", "MSFT", "MSFT"),
date = c("2016-01-01", "2016-01-02", "2016-01-03", "2016-01-04"), stringsAsFactors=F)
df1
ticker date
1 MSFT 2016-01-01
2 MSFT 2016-01-02
3 MSFT 2016-01-03
4 MSFT 2016-01-04
df2 <- data.frame(ticker = c("AAPL", "GOOG", "MSFT", "FB"),
date = c("2016-01-01", "2016-01-01", "2016-01-02", "2016-01-03"), stringsAsFactors=F)
df2
ticker date
1 AAPL 2016-01-01
2 GOOG 2016-01-01
3 MSFT 2016-01-02
4 FB 2016-01-03
df3
ticker date
1 MSFT 2016-01-01
2 MSFT 2016-01-03
3 MSFT 2016-01-04
还有指定行的前一天和后一天。所以我的最终 df 将是:
ticker date
1 MSFT 2016-01-04
注意,3 MSFT 2016-01-02 是匹配项,因此需要删除该行,以及前一天和后一天,3 MSFT 2016-01-01 和 3 MSFT 2016-01-03
两个匹配的示例:
df1 <- data.frame(ticker = c("MSFT", "MSFT", "MSFT", "MSFT"),
date = as.Date(c("2016-01-01", "2016-01-02", "2016-01-03", "2016-01-04")),
stringsAsFactors=F)
df2 <- data.frame(ticker = c("AAPL", "GOOG", "MSFT", "MSFT"),
date = as.Date(c("2016-01-01", "2016-01-01", "2016-01-01","2016-01-02")),
stringsAsFactors=F)
目标输出:
ticker date
4 MSFT 2016-01-04
【问题讨论】:
标签: r