R:在另一列的因子级别内基于日期列子集数据帧

时间:2017-06-30 01:56:50

标签: r date subset multiple-conditions

我有一个数据框,由不同观察者在不同日期测量的形态特征组成。 我的目标是在特定日期(条件2:低于给定值)之前对数据框进行子集化以移除由一个特定观察者(条件1:在因子级别内)进行的测量。

这是一个示例数据框,我想摆脱" A" 2012-06-04之前:

obs <- rep(c("A", "B"), each=5)
date <- rep(c("2012-06-01", "2012-06-02","2012-06-03","2012-06-04","2012-06-05"), times=2)
size <- rnorm(10)
df <- data.frame(date, obs, size)

我尝试使用subset功能无效。我相信这一定很容易! 谢谢!

2 个答案:

答案 0 :(得分:2)

也许是subset

subset(df, !(obs == "A" & as.Date(date) < as.Date("2012-06-04")))


#         date obs       size
#4  2012-06-04   A -0.6892431
#5  2012-06-05   A -0.8715875
#6  2012-06-01   B  0.1167215
#7  2012-06-02   B  0.9300228
#8  2012-06-03   B  0.8731350
#9  2012-06-04   B -0.7219468
#10 2012-06-05   B  0.9846479

根据文件:

  

subset - 指示要保留的元素或行的逻辑表达式

因此,我们为要保留的行创建逻辑向量。

或者subset没有相同的逻辑:

df[!(df$obs == "A" & as.Date(df$date) < as.Date("2012-06-04")), ]

答案 1 :(得分:0)

我们可以使用filter

中的tidyverse
library(dplyr)
df %>%
   mutate(date = as.Date(date)) %>%
   filter(!(obs == "A" &  date < as.Date("2012-06-04")))
#        date obs       size
#1 2012-06-04   A  2.0358088
#2 2012-06-05   A  0.2621886
#3 2012-06-01   B  0.3747718
#4 2012-06-02   B -0.7784647
#5 2012-06-03   B  1.0913249
#6 2012-06-04   B -0.4795268
#7 2012-06-05   B  0.6139994