[英]Subsetting within a range in R
所以我想根据两个日期对我的数据集进行子集化。 我有一个变量表示化疗开始日期和实验室访问的第二个数据。
我想对我的数据集进行子集化,以便只保留那些在化疗开始数据前一年或一年后采集的实验室记录。
我目前正在使用以下代码:
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 个观察值。 有人可以帮忙吗? 提前致谢
Chris Littler 的解决方案也有效。 我更习惯于 tidyverse 而不是基本的 R 函数,所以这里是 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.