所以我想基于两个日期对数据集进行子集化。 我有一个变量,它指示化疗的开始日期和第二个用于实验室访问的数据。
我想对我的数据集进行子集,以便仅保留那些在化学启动数据前一年或一年后获取的实验室记录。
我当前正在使用以下代码:
df$lower <- df$ChemoDate - 365 #1 year earlier chemo start date
df$upper <- df$ChemoDate + 365 #1 year after chemo start date
df <- subset(df, LabDate == (ChemoDate > lower & ChemoDate < upper))
#only keep records that have a lab date within a year before or after chemo date
运行此代码后,最终得到0个观察结果。谁能帮忙吗?预先感谢
答案 0 :(得分:0)
克里斯·利特勒(Chris Littler)的解决方案也有效。我比基本R函数更习惯于tidyverse,所以这里是tidyverse等效项:
library(tidyverse)
new_df <- filter(df, LabDate > lower & LabDate < upper)
使用伪造的数据来确认它符合您的期望:
library(tidyverse)
## make fake data
df <- tibble(
a = letters[1:10],
LabDate = sample(500:1500, 10),
ChemoDate = sample(700:800, 10)
)
df
#> # A tibble: 10 x 3
#> a LabDate ChemoDate
#> <chr> <int> <int>
#> 1 a 1419 749
#> 2 b 945 738
#> 3 c 935 735
#> 4 d 956 777
#> 5 e 1299 763
#> 6 f 759 792
#> 7 g 1439 782
#> 8 h 964 779
#> 9 i 1091 785
#> 10 j 1491 736
## apply your code
df$lower <- df$ChemoDate - 365
df$upper <- df$ChemoDate + 365
## suggested solution
new_df <- filter(df, LabDate > lower & LabDate < upper)
new_df
#> # A tibble: 6 x 5
#> a LabDate ChemoDate lower upper
#> <chr> <int> <int> <dbl> <dbl>
#> 1 b 945 738 373 1103
#> 2 c 935 735 370 1100
#> 3 d 956 777 412 1142
#> 4 f 759 792 427 1157
#> 5 h 964 779 414 1144
#> 6 i 1091 785 420 1150