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



我试图根据逻辑表达式在R中选择一个子集,包括3个不同的变量。具体来说,当t >= tst <= te(基本上,当t E [ts,te])时,我想为每个group选择一个子集。

示例数据:

t <- c(1,2,3,4,5,-1,2,3,4,5,6)
ts<- c(2,2,2,2,2,-1,-1,-1,-1,-1,-1)
te <- c(4,4,4,4,4,5,5,5,5,5,5)
group <-c(1,1,1,1,1,2,2,2,2,2,2)
v<-c(1,2,4,5,1,1,3,2,4,4,1)
dt <- data.frame(cbind(t,ts,te,group,v))
所需输出:

t <- c(2,3,4,-1,2,3,4,5)
ts<- c(2,2,2,-1,-1,-1,-1,-1)
te <- c(4,4,4,5,5,5,5,5)
group <-c(1,1,1,2,2,2,2,2)
v<-c(2,4,5,1,3,2,4,4)
dt1 <- data.frame(cbind(t,ts,te,group,v))

我试着:

dt1<-dt %>%
group_by(group) %>% subset(dt, "t" >= "ts" & "t" <= "te")

但是我得到了错误:

sub - set.data.frame(., dt, "t"祝辞="ts","t"<= "子集"必须是逻辑的

我也尝试了我在这里看到的一些帖子的解决方案:

criteria <- c("t >= ts", "t <= te")
dt1<-dt %>%
group_by(group) %>% subset(dt, eval(parse(text = criteria)))

但是我仍然得到:

sub - set.data.frame(., dt, eval(parse(text = criteria)))错误:
'子集'必须是逻辑的

你知道我可能做错了什么吗?多谢

这会产生您想要的输出:

# your dataframe
t <- c(1,2,3,4,5,-1,2,3,4,5,6)
ts<- c(2,2,2,2,2,-1,-1,-1,-1,-1,-1)
te <- c(4,4,4,4,4,5,5,5,5,5,5)
group <-c(1,1,1,1,1,2,2,2,2,2,2)
v<-c(1,2,4,5,1,1,3,2,4,4,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)

最新更新