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