带有变量的逻辑表达式以在 R 错误中选择子集:子集必须是逻辑的

问题描述

我试图根据逻辑表达式在 R 中选择一个子集,包括 3 个不同的变量。具体来说,我想在 groupt >= 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)