2015-10-19 4 views
1

У меня 2 ДФ как этогоКак подобрать переменные столбца в DF1 на основе важных переменных, которые я получил в DF2?

ID = c('x1','x2','x5') 
df1 <- data.frame(ID) 

x1 = c(1,2,3,4,5) 
x2 = c(11,12,13,14,15) 
x3 = c(21,22,23,24,25) 
x4 = c(31,32,33,34,35) 
x5 = c(41,42,43,44,45) 
df2 <- data.frame(x1,x2,x3,x4,x5) 

Желаемая выход

x1 x2 x5 
1 1 11 41 
2 2 12 42 
3 3 13 43 
4 4 14 44 
5 5 15 45 

Я хотел бы мой новый набор данных содержит только те переменные, которые определены в df1 как важный (то есть: x1, x2, x5) со значениями из df2.

В этом простом наборе данных я знаю, что могу это сделать, но просто удалив x3, x4 в df2, но в идеале я хотел бы применить его к большему набору данных, где у меня более 100 переменных, и, следовательно, хотелось бы сделать это программно.

+1

'df2 [as.character (df1 $ ID)]' –

+0

Удивительная я применил его к большему набору данных и он работал как шарм !!. Спасибо Дэвиду. Так что «список» сделал трюк. Я буду использовать его сейчас. – Sharath

+1

Нет, 'as.character' сделал. Если 'df1 $ ID' уже имеет класс символов, тогда будет работать только' df2 [df1 $ ID] '. Попробуйте это на 'df1 <- data.frame (ID, strAsAsFactors = FALSE)' –

ответ

3

Я не могу найти простофилю так что здесь goes- просто подмножество значений as.character(df1$ID), как в

df2[as.character(df1$ID)] ## Or just `df2[df1$ID]` if its already a character 
# x1 x2 x5 
# 1 1 11 41 
# 2 2 12 42 
# 3 3 13 43 
# 4 4 14 44 
# 5 5 15 45 

Причины является as.character для того, чтобы избежать суба-установки, лежащие в основе df1$ID режима хранения (целое) скорее это уровни


Хотя этот вопрос помечен data.table, так что мы могли бы сделать это по ссылке (если у нас есть data.table) - нет необходимости конвертировать в character

setDT(df2)[, setdiff(names(df2), df1$ID) := NULL] 
df2 
# x1 x2 x5 
# 1: 1 11 41 
# 2: 2 12 42 
# 3: 3 13 43 
# 4: 4 14 44 
# 5: 5 15 45 

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

  • Нет связанных вопросов^_^