2013-07-28 67 views
1

時,應考慮替代的可變以下- [R子集劃分somedata

#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",] 

(當然,這不起作用)

這裏的想法是我可以在腳本的頂部設置它,不必搜索並替換特定的選擇每次我希望改變它的標準。

有什麼建議嗎?

+0

你可以這樣做:'blah < - quote(test1 $ x)'然後做:'test2 < - test1 [eval(blah)==「A」,]' – Arun

+0

'blah < - 「x」 ; test1 [test1 [[blah]] ==「A」,]'也許? – A5C1D2H2I1M1N2O1R2T1

回答

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()和子集():

object = "test1" 
column = "x" 

test2 = subset(get(object), get(column) == "A") 
1

下面應該工作:

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

其中name1name2 containe你正在使用的數據幀列的名稱。