【问题标题】:How to lookup in R如何在 R 中查找
【发布时间】:2020-09-09 13:00:30
【问题描述】:

我有两个df:

df1 <- data.frame(DTS = c(as.Date("2009-12-12"), as.Date("2012-12-12") , as.Date("2015-3-4"), 
as.Date("2018-7-9")),score= c(10,7,3,8))

df2 <- data.frame(DTS = c(as.Date("2009-12-14"), as.Date("2013-09-12") ,as.Date("2014-09-12"),  
as.Date("2015-3-4"),as.Date("2016-05-05"), as.Date("2019-12-12")))

我需要通过在 df1 中查找来找到 df2 中相关日期的分数

这可行,但它远非优雅.. 有更好的解决方案吗?

df2$score <- 0

for (int_x in 1:NROW(df1)) {

   df2$score[ df2$DTS <= df1$DTS[int_x+1]  &  df2$DTS> df1$DTS [int_x] ] <- df1$score[int_x] 

 }

 df2$score[df2$DTS > df1$DTS[nrow(df1)]]   <- df1$score[NROW(df1)] 

【问题讨论】:

  • 相关/可能重复:Merge 2 dataframes by matching dates
  • 它不重复,因为我的问题没有匹配的日期
  • 你能用文字解释一下这个分数应该是什么,而不是你自己觉得不优雅的代码吗?
  • 分数是正确的..我只是不喜欢这些循环..我是wibderubg fu tgere是一个函数还是我这样做的任何东西?

标签: r


【解决方案1】:

由于DTS中的df1被排序findInterval可以使用。

df2$score <- df1$score[findInterval(df2$DTS, df1$DTS, left.open=TRUE)]
df2
#         DTS score
#1 2009-12-14    10
#2 2013-09-12     7
#3 2014-09-12     7
#4 2015-03-04     7
#5 2016-05-05     3
#6 2019-12-12     8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2011-05-07
    • 2019-10-09
    • 2014-01-13
    相关资源
    最近更新 更多