r - 比较两个数据帧时处理不存在的时间延迟
问题描述
假设以下两个数据帧,均以 为索引day
,其中df1
有一个水果列表。对于每一个day
in 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"]
显然会引发错误。
解决方案
这里不需要循环。根本没有定义水果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
推荐阅读
- android - 滚动到recyclerview android中的特定视图类型
- javascript - 如何使用 JS 触发下载音频链接,而无需浏览器导航到新页面?
- r - 使用 R 命令 dnorm 查找计数的期望值
- laravel - 如何在 Laravel Vue 设置中使用作用域插槽来类绑定
- php - 检测 fastCGI 是否在远程服务器上运行
- kubernetes - 无法连接到 Kafka 无头服务
- kurento - Kurento Media Server:服务在启动后立即停止
- php - VSCode 没有按照 php.ini 显示 DOCUMENT_ROOT
- javascript - 当我在我的购物篮中删除多个产品时,只有第一个产品数量返回我的数据库,其他产品数量没有返回
- django-rest-framework - Django Restframework dj-rest-auth 密码重置确认提交问题