2016-04-07 6 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: Да, это было на самом деле так просто. По какой-то причине я думал, что это должно быть в рамках «c()». Спасибо вам. – 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))' также можно использовать, если они не могут повторно назначить ' ex_form' –

+0

Это очень полезная команда. Большое спасибо! – erebusgw

1

Am я что-то отсутствует, или же просто делает temp <- df[,step3] возвращение именно то, что вы говорите, вы хотите?

Смежные вопросы