如何将文本和变量粘贴到R中的逻辑表达式中?

| 我想将变量粘贴到用于子集数据的逻辑表达式中,但是子集函数在粘贴时不会将它们视为列名(使用ot而不带引号)。 我有一个数据列,列名为col1,col2等。我想对colx <0.05的行进行子集化 这样做的工作:
subsetdata<-subset(dataframe, col1<0.05)

subsetdata<-subset(dataframe, col2<0.05)
这不起作用:
for (k in 1:2){
subsetdata<-subset(dataframe, paste(\"col\",k,sep=\"\")<0.05)
}

for (k in 1:2){
subsetdata<-subset(dataframe, noquote(paste(\"col\",k,sep=\"\"))<0.05)
}
我找不到答案;有什么建议么?     
已邀请:
        这里有一些更接近Jasper方法的选项。首先,您可以将列名称定义为单独的变量,然后使用它从
data.frame
中选择变量,就好像它是
list
一样(因为
data.frame
本质上是
list
):
for(k in 1:2){
  colname <- paste(\"col\",k,sep=\"\")
  subsetdata <- dataframe[dataframe[[colname]] < 0.05, ]
}
或者您可以这样引用列名称:
  subsetdata <- dataframe[dataframe[colname,] < 0.05, ]
最后,您可以使用expression8ѭ,尽管您需要提供一个逻辑表达式(如Joshua Ulrich指出的那样):
  subsetdata <- subset(dataframe, eval(substitute(x < 0.05, list(x = as.name(colname)))))
    
        您正试图使用​​ѭ8making,这比需要做的要难得多。请注意,ѭ11表示第二个参数(也称为子集)必须是一个表达式,而您没有给它一个表达式:
> is.expression(paste(\"col\",1:2,sep=\"\")<0.05)
[1] FALSE
您可以构造一个未求值的表达式,然后在将其传递给
subset
时对其求值,但是还有很多更简单的方法。例如:仅利用
<
运算符的矢量化性质。
# sample data
set.seed(21)
dataframe <- data.frame(col1=rnorm(10),col2=rnorm(10),col3=1)

logicalCols <- dataframe[,paste(\"col\",1:2,sep=\"\")] < 0.05
#        col1  col2
#  [1,] FALSE  TRUE
#  [2,] FALSE FALSE
#  [3,] FALSE  TRUE
#  [4,]  TRUE FALSE
#  [5,] FALSE FALSE
#  [6,] FALSE FALSE
#  [7,]  TRUE FALSE
#  [8,]  TRUE FALSE
#  [9,] FALSE  TRUE
# [10,]  TRUE  TRUE
ANY <- apply(logicalCols, 1, any)  # any colx < 0.05
ALL <- apply(logicalCols, 1, all)  # all colx < 0.05
dataframe[ANY,]
dataframe[ALL,]
    
        我不太清楚您要做什么,但是也许在
subset
运算中使用
&
|
会有所帮助。
col1
col2
均小于0.05:
subsetdata<-subset(dataframe, col1 < 0.05 & col2 < 0.05)
col1
col2
小于0.05:
subsetdata<-subset(dataframe, col1 < 0.05 | col2 < 0.05)
约书亚(Joshua)的答案是在许多专栏中更轻松地完成此操作的好方法。     

要回复问题请先登录注册