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

Jas*_*per 2 r paste

我想将变量粘贴到我用于子集数据的逻辑表达式中,但是子集函数在粘贴时不会将它们看作列名(ot不带引号).

我有一个名为col1,col2等列的数据框.我想为colx <0.05的行进行子集化

这个工作:

subsetdata<-subset(dataframe, col1<0.05)

subsetdata<-subset(dataframe, col2<0.05)
Run Code Online (Sandbox Code Playgroud)

这不起作用:

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)
}
Run Code Online (Sandbox Code Playgroud)

我找不到答案; 有什么建议?

Jos*_*ich 9

通过尝试使用它比使用它要困难得多subset.请注意,?subset第二个参数(也称为子集)必须是一个表达式,并且您没有给它一个表达式:

> is.expression(paste("col",1:2,sep="")<0.05)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

您可以构建一个未评估的表达式,然后在传递给它时对其进行评估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,]
Run Code Online (Sandbox Code Playgroud)