我有一个包含多个日期变量的数据集,并希望创建子集,通过定义日期变量的所需日期,可以在其中过滤掉某些行。数据集中的每一行代表精神病学中的一个患者病例,并包含所有应用的隔离。因此,对于每个病例,要么没有隔离,要么记录为seclusion_date1、seclusion_date2...、seclusion_enddate1、seclusion_enddate2...。(取决于发生了多少次隔离)。我的计划是只用那些病例创建一个子集,其中没有隔离记录或seclusion_date1(首次隔离)在2019年6月30日之后以及所有可能的隔离_结束日期(1、2、3......)为2020年5月1日前,排除2019年6月30日前和2020年5月1日后发生的隔离病例。
我是R语言的新手,所以我的尝试可能是非常错误的。我感谢任何帮助或想法。
我尝试用R中的subset函数,为了一次过滤掉所有可能的隔离_enddates,我尝试使用starts_with,并尝试写一个循环。all_seclusion_enddates <- function() { c(WMdata, any_of(c("seclusion_enddate")), starts_with("seclusion_enddate")) }
错误:any_of()'必须在 selecting 函数中使用。
然后我的计划就会是cohort_2_before <- subset(WMdata, seclusion_date1 >= "2019-07-01" & all_seclusion_enddates <= "2020-04-30")
循环:for(i in 1:53) { cohort_2_before <- subset(WMdata, seclusion_date1 >= "2019-07-01" & ((paste0("seclusion_enddate", i))) <= "2020-04-30" & restraint_date1 >= "2019-07-01" & ((paste0('seclusion_enddate', i))) <= "2020-04-30") }
结果:创建了0个观测值的子集。
1条答案
按热度按时间jhdbpxl91#
由于您没有提供可重复的示例,我无法看到您的具体问题,但我可以帮助解决核心问题。
any_of
,starts_with
等是tidyverse
包用来在函数中选择列的函数。它们只能在tidyverse选择器函数中用来控制它们的行为,这就是为什么你会得到那个错误。不过,它们可能是我用来解决这个问题的工具,所以你可以这样使用它们:从默认数据集
iris
开始,我们使用dplyr
中的filter_at
函数(在R控制台中输入?filter_at
以阅读帮助)。(选择特定行)从 Dataframe (指定给.tbl
参数)基于条件(提供给.vars_predicate
参数),它根据提供给.vars
参数的选择器应用于特定列。在本例中,我们获取 Dataframe
iris
,使用%>%
pipe命令将其传递到filter_at
,然后告诉它只查找以'Sepal'
开头的列,然后告诉它选择 * 所有 * 所选列都符合给定条件的行:value > 4
。如果我们想要 any column匹配条件的行,可以使用any_vars(.>4)
。您可以通过将多个条件传输到其他过滤器函数中来添加多个条件:
在这里,我们再次过滤前面的结果,以获取也包含
Petal.Width > 0.3
的行在您的情况下,您需要确保日期值的格式为date(使用
as.Date
),然后过滤seclusion_date1
和vars(starts_with('secusion_enddate'))