我有一个data.frame,包含两列,时间和值。让我们说:
> s
> time value
>1 -1.40325749 -0.5282231
>2 -0.32640410 -1.8719568
>3 -0.26288196 -0.9861694
>4 -0.19906006 -0.8487832
>5 -0.18720951 -0.2248195
>6 -0.14219086 0.3387807
>7 -0.05981503 1.3872106
>8 0.37187516 2.0057095
>9 0.42432858 2.6805815
>10 1.19915563 1.9988563
我想根据具体情况构建一个过滤这些数据的函数。这是我的代码:
> select<-function(object,cond)
{
subset(object,eval(deparse(substitute(cond))))
}
如果我现在使用我的新功能如下:
>select(s,value<0)
我想只看到行,其中值为&lt; 0.例如。
> s
> time value
>1 -1.40325749 -0.5282231
>2 -0.32640410 -1.8719568
>3 -0.26288196 -0.9861694
>4 -0.19906006 -0.8487832
>5 -0.18720951 -0.2248195
但是,运行此代码后,我有一个错误,该子集必须是逻辑的。我尝试了所有我知道的&#34;值&lt; 0&#34;作为R的表达式可见。有人知道如何解决它吗?
Error in subset.data.frame(object, eval(deparse(substitute(cond)))) :
'subset' must be logical
此致 米甲
答案 0 :(得分:0)
尝试以下任何一项:
select <- subset
select <- function(...) subset(...)
select <- function(data, cond) eval.parent(substitute(subset(data, cond)))
select <- function(data, cond) {
mc <- match.call()
mc[[1L]] <- quote(subset)
m <- match(c("data", "cond"), names(mc), 0L)
names(mc)[m] <- c("x", "subset")
eval.parent(mc)
}
然后使用内置BOD data.frame
select(BOD, Time > 3)
答案 1 :(得分:0)
我也喜欢dplyr
:
library(dplyr)
s <- s %>%
filter(value < 0)
按条件过滤行