我有一个数据框,开始和结束日期在。我试图工作,如果我的日期落在哪一行。例如,我的数据框是这样的;
country startDate endDate weather
CHI 2022-12-29 2023-01-08 Rain
ENG 2023-01-01 2023-01-08 Cloud
GER 2023-01-02 2023-01-08 Cloud
FRA 2023-01-30 2023-02-05 Dry
我现在想创建一个指标,这样我就可以看到我的日期集是指哪个国家。
datestodo
2023-02-03
2023-02-04
因此,我需要我试图写的东西来返回FRA的行。我试图用between参数来做这件事,但我认为我很挣扎/可能不起作用,因为开始和结束没有联系,因为它们在不同的列中
我的尝试
activedates = between(datestodo, mydf$startDate, mydf$endDate)
不一定要使用between函数来完成,这也很好或类似
2条答案
按热度按时间cyej8jka1#
我们可以使用
which()
来标识落在startDate
和endDate
列之间的给定日期的行索引。我们用mydf[which...,]来划分行的子集。
碱基R:
k5ifujac2#
TarJoe提供了一个基本的R解决方案。下面是为什么
dplyr
不能工作-以及使其工作的方法。当你运行你的代码时,错误会告诉你什么是错误的。我们已经注意到错误消息对tidyverse包中的函数有用。
这个错误说你提供给
left
参数的内容太长了(长度为4而不是2)。如果我们阅读
between()
的帮助文件,我们会发现发生了什么。between()
的用法是:其中
x
是值的向量,left
和right
是边界值。输入left
和right
需要可循环到x
的长度,因此它们需要与x
相同的长度或整数除数。您的x
的长度为2,因此left
和right
可以分别有两个值,也可以有一个重复使用的值。该函数不能将四个边界值Map到两个比较值。你想做的是将每一行中的开始和结束日期与
datestodo
中的两个值进行比较,并只返回那些匹配的值。下面是如何使用between()
函数以dplyr
的方式完成这一任务的。