2016-04-07 14 views
0

標準の式(y〜x1 + x2)を生成する自動化されたスクリプトがあり、これらの変数に基づいてデータをスクリーニングしたいと思います。変数名のリストを使用してデータフレームの列を削除する

これまでのところ、私はここまで得ているが、私は、私はかなりそれを把握することはできませんスティッキングポイントをヒット:

#Example data 
df <- data.frame(x=1:5, y=2:6, z=3:7, u=4:8) 
df 
    x y z u 
1 1 2 3 4 
2 2 3 4 5 
3 3 4 5 6 
4 4 5 6 7 
5 5 6 7 8   
#Example formula 
ex_form = "x~y+u" 
#Delete the ~ and add a + sign to be consistent 
step1 = gsub("~","+", ex_form) 
#Remove + signs 
step2 = strsplit(step1, "\\+") 
#Final list of variables 
step3 = unlist(step2) 
私が見てきた

ほとんどのソリューションは、の線に沿って何かである:

#Create list of variables 
mylist = c("x", "y", "u") 
#Cut data 
temp = df[ ,mylist] 
temp 
    x y u 
1 1 2 4 
2 2 3 5 
3 3 4 6 
4 4 5 7 
5 5 6 8 

しかし、この解決策は自動化にはあまり適していないので、私はその結果に跳ね返ります。何かご意見は?

注:タグは私の推測です。

+0

'df [、step3]'は解決策ではありませんか? – adaien

+1

'df [、step2 [[1]]]'を使って、あなたはすべて設定されています。 – Gopala

+0

@adianaとGopala:うん、それは実際には簡単だった。 – erebusgw

答えて

1

" "の間に数式を入力しないと、それが認識され、all.vars()を使用して変数を抽出できます。

ex_form = x~y+u #Without quotes it is a formula, check str(ex_form) 
df[, all.vars(ex_form)] 
# x y u 
#1 1 2 4 
#2 2 3 5 
#3 3 4 6 
#4 4 5 7 
#5 5 6 8 
+1

'all.vars(as.formula(ex_form))'は、 'c() 'フレームワーク内で' ex_form' –

+0

これは非常に便利なコマンドです。ありがとうございます! – erebusgw

1

アムは、私が何かが足りないか、単にあなたが欲しいと言うまさにtemp <- df[,step3]リターンをやっていますか?