Я полный noob в R, и я попытался (и повторил), чтобы найти ответ на следующую проблему, но я не смог получить ни одну из предложенных решения, чтобы сделать то, что я заинтересован вR: Слияние списков кадров данных
у меня есть два списка названных элементов, причем каждый элемент, указывающий на кадры данных с идентичными раскладками:.
(EDIT)
df1 <- data.frame(A=c(1,2,3),B=c("A","B","C"))
df2 <- data.frame(A=c(98,99),B=c("Y","Z"))
lst1 <- c(X=df1,Y=df2)
df3 <- data.frame(A=c(4,5),B=c("D","E"))
lst2 <- c(X=df3)
(EDIT 2)
S o похоже, что хранение нескольких кадров данных в списке - плохая идея, так как она преобразует кадры данных в списки. Поэтому я пойду искать альтернативный способ хранения набора именованных фреймов данных.
В общем, названия элементов в двух элементах могут частично или полностью перекрываться или полностью отсутствовать.
Я ищу способ объединить два списка в один список:
<some-function-sequence>(lst1, lst2)
->
c(X=rbind(df1,df3),Y=df2)
-resulting в чем-то вроде этого:
[EDIT: Синтаксис изменен, чтобы правильно отражать желаемый результат (список-о-данных кадров)] $ X АВ Б 3 3 С 4 4 D 5 5 Е
$X.B
A B
1 98 Y
2 99 Z
Т.е.:
- ЕСЛИ списки содержат одинаковые имена элементов, каждый из которых указывает на кадр данных, то я хочу «rbind» строки из этих двух кадров данных и назначить результирующий кадр данных на то же имя элемента в результирующем списке.
- В противном случае имена элементов и фреймы данных из обоих списков должны быть просто скопированы в результирующий список.
Я попытался решения из ряда обсуждений, таких как:
- Can I combine a list of similar dataframes into a single dataframe?
- Combine/merge lists by elements names
- Simultaneously merge multiple data.frames in a list
- Combine/merge lists by elements names (list in list)
- Convert a list of data frames into one data frame
-but Я не смог найти правильное решение. Основная проблема заключается в том, что кадр данных заканчивается преобразованием в список приложением «mapply/sapply/merge/...» - и обычно также нарезается и/или объединяется способами, которые меня не интересуют. :)
Любая помощь с этим будет высоко оценена!
[РЕШЕНИЕ] Решение, как представляется, изменить использование c(...)
при сборе кадров данных в list(...)
, после чего раствор, предложенный Пьером, кажется, дает желаемый результат.
Потратьте некоторое время, чтобы создать несколько кадров данных примеров. Псевдокод недостаточно специфичен для описания внутренней структуры того, с чем вы работаете. 'c (a =, ..' будет разбивать кадр данных на элементы списка для каждого столбца. Я сомневаюсь, что вы реальные данные отражают это. –
Если у вас есть данные, хранящиеся в списках как в 'list (a = df1, b = df2)', тогда вы можете использовать split и rbind 'lapply (split (c (lst1, lst2), имена (c (lst1, lst2))), функция (lst). call (rbind, lst)) ' –
Спасибо за ваш ответ Pierre. Я попробовал ваше предложение выше, но не смог заставить его работать. Я добавил некоторые данные примера к моему вопросу и результат запуска вашего команду на ней. – RBA