1

考虑以下

#make some data
x<-c("A","B","C","D")
y<-c(1,2,3,4)
test1<-as.data.frame(cbind(x,y))
test1

 x y
1 A 1
2 B 2
3 C 3
4 D 4

#subset 
test2<-test1[test1$x=="A",]
test2

  x y
1 A 1

现在我希望能够test$x在子集阶段用一个变量替换表达式,例如:

blah<-"test1$x"
test2<-test1[blah=="A",]

(当然,这是行不通的)

这里的想法是我可以在脚本的顶部设置它,并且每次我希望更改它时都不必搜索和替换特定的选择标准。

有什么建议么?

4

2 回答 2

1

以下应该有效:

subset1 <- (test1[[name1]] == val1)
test2[[name2]] <- test1[[name1]][subset1]

wherename1name2包含您正在使用的数据框列的名称。

于 2013-07-28T11:46:30.800 回答
0

eval() 函数绝对是要走的路。我还冒昧地对您的代码进行了一些优化:

test1 = data.frame(x = c("A","B","C","D"), y = c(1:4)) # no cbind() needed, you can directly insert your vectors into data.frame()
blah = quote(test1$x)
test2 = test1[ eval(blah) == "A", ]

你甚至可以使用 get() 和 subset() 使你的替换更细粒度:

object = "test1"
column = "x"

test2 = subset( get(object), get(column) == "A" )
于 2013-07-28T11:15:39.587 回答