Как связать столбцы из фрейма данных разной длины, вставив NA?

У меня есть список L фреймов данных с двумя столбцами каждый ... ключ и столбец значений. Я хотел бы создать фрейм данных, где i-й столбец является столбцом значений для i-го фрейма данных. Проблема в том, что разные фреймы данных в списке L имеют немного разные ключи (одинаковые по большей части, но плюс-минус пара от data.frame до data.frame), поэтому простой do.call с cbind не поможет Это). Я перебрал список фреймов данных и взял объединение ключевых столбцов, чтобы получить всеобъемлющий набор ключей bigKeySet ... теперь я хотел бы создать этот data.frame, в котором есть строка для каждого ключей в этом bigKeySet и запись NA в столбце, если в data.frame не было записи для этого ключа. Однако я не уверен, как это сделать - есть предложения?


person Palace Chan    schedule 14.02.2012    source источник


Ответы (2)


Предполагая, что у вас есть функция valueForKey(), которая возвращает значение для ключа (или эквивалентного оператора):

myKeys <- c('foo', 'bar')
bigKeySet <- c('foo', 'baz', 'bar')
result <- as.vector(mapply(function(x) { if (x %in% myKeys) print(valueForKey(x)) else print(NA) }, bigKeySet))

Вы можете привязать result к интересующему вас фрейму данных. Повторите для всех экземпляров myKeys.

person Alex Reynolds    schedule 14.02.2012

без некоторых образцов данных я не уверен, но:

merge(df1,df2,all=T,by='keys') 

объединит два фрейма данных по их ключевым столбцам и соответственно назовет столбцы значений.

person Justin    schedule 14.02.2012