繁体   English   中英

在 R 范围内进行子集化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM