首页 > 解决方案 > 比较两个数据帧时处理不存在的时间延迟

问题描述

假设以下两个数据帧,均以 为索引day,其中df1有一个水果列表。对于每一个dayin df2,我都想知道in的果df2$day - 1

df1 <- data.frame(
  day = rep(1:20 ),
  fruit = sample(c("apple","orange","grapes","pineapple","tomato"), 20, replace=T))

df2 <- data.frame(
  day = rep(1:20,2 ))

我该如何处理在第 1df2天中没有第 1天的事实df1?我试过这个for循环:

out <- c() 

for (day in unique(df2[,"day"])) {
out <- as.data.frame(
rbind(out,
  cbind(
    day,
    fruit = df1[df1[,"day"] == day , "fruit"])))
}

更改fruit = df1[df1[,"day"] == day - 1 , "fruit"]显然会引发错误。

标签: r

解决方案


这里不需要循环。根本没有定义水果df2$day == 1,所以应该记录为NA。为此,您可以执行以下操作:

df2$fruit <- df1$fruit[replace(df2$day, df2$day == 1, NA) - 1]

所以现在df2看起来像这样:

df2
#>    day     fruit
#> 1    1      <NA>
#> 2    2     apple
#> 3    3     apple
#> 4    4     apple
#> 5    5    grapes
#> 6    6    orange
#> 7    7 pineapple
#> 8    8    grapes
#> 9    9    orange
#> 10  10    grapes
#> 11  11    grapes
#> 12  12    grapes
#> 13  13    orange
#> 14  14    grapes
#> 15  15    tomato
#> 16  16 pineapple
#> 17  17    orange
#> 18  18    orange
#> 19  19    tomato
#> 20  20    orange
#> 21   1      <NA>
#> 22   2     apple
#> 23   3     apple
#> 24   4     apple
#> 25   5    grapes
#> 26   6    orange
#> 27   7 pineapple
#> 28   8    grapes
#> 29   9    orange
#> 30  10    grapes
#> 31  11    grapes
#> 32  12    grapes
#> 33  13    orange
#> 34  14    grapes
#> 35  15    tomato
#> 36  16 pineapple
#> 37  17    orange
#> 38  18    orange
#> 39  19    tomato
#> 40  20    orange

推荐阅读