问题描述
我试图根据逻辑表达式在 R 中选择一个子集,包括 3 个不同的变量。具体来说,我想在 group
和 t >= ts
时为每个 t <= te
选择一个子集(基本上,当 t E [ts,te] 时)。
示例数据:
t <- c(1,2,3,4,5,-1,6)
ts<- c(2,-1)
te <- c(4,5)
group <-c(1,1,2)
v<-c(1,1)
dt <- data.frame(cbind(t,ts,te,group,v))
所需的输出:
t <- c(2,5)
ts<- c(2,2)
v<-c(2,4)
dt1 <- data.frame(cbind(t,v))
我试过了:
dt1<-dt %>%
group_by(group) %>% subset(dt,"t" >= "ts" & "t" <= "te")
但是我得到了错误:
subset.data.frame(.,dt,"t" >= "ts" & "t"
criteria <- c("t >= ts","t <= te")
dt1<-dt %>%
group_by(group) %>% subset(dt,eval(parse(text = criteria)))
但我仍然得到:
subset.data.frame(.,eval(parse(text = criteria))) 中的错误:
“子集”必须符合逻辑
有什么想法可能是我错了吗?非常感谢
解决方法
这应该会带来您想要的输出:
# your dataframe
t <- c(1,2,3,4,5,-1,6)
ts<- c(2,-1)
te <- c(4,5)
group <-c(1,1,2)
v<-c(1,1)
dt <- data.frame(cbind(t,ts,te,group,v))
# your desired output
desired_output <- subset(dt,t >= ts & t <= te)
Edit: as Ben suggested: if you want to make it with dplyr use filter
desired_output<-dt %>%
group_by(group) %>%
filter(t >= ts & t <= te)