我有一个数据框,由不同观察者在不同日期测量的形态特征组成。 我的目标是在特定日期(条件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
功能无效。我相信这一定很容易!
谢谢!
答案 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