У меня есть огромный список небольших фреймов данных, которые я хотел бы осмысленно объединить в один, однако логика того, как это сделать, ускользает от меня.
Например, если у меня есть список фреймов данныхэто выглядит примерно так, хотя и с гораздо большим количеством файлов, многие из которых мне не нужны в моем фрейме данных:
MyList = c("AthosVersusAthos.csv", "AthosVerusPorthos.csv", "AthosVersusAramis.csv", "PorthosVerusAthos.csv", "PorthosVersusPorthos.csv", "PorthosVersusAramis.csv", "AramisVersusAthos.csv", "AramisVersusPorthos.csv", "AramisVerusPothos.csv", "BobVersusMary.csv", "LostCities.txt")
Я хочу собрать их в один большой фрейм данных.Что бы выглядело так:
| |
AthosVersusAthos | PorthosVersusAthos | AramisVersusAthos
| |
------------------------------------------------------
| |
AthosVerusPorthos | PothosVersusPorthos| AramisVersusPorthos
| |
------------------------------------------------------
| |
AthosVersusAramis | PorthosVersusAramis| AramisVersusAramis
| |
Или, возможно, более правильно (с номерами выборок только в одной части матрицы):
| Athos | Porthos | Aramis
-------|------------------------------------------------------
| 10 9 5 | |
Athos | 2 10 4 | |
| 3 0 10 | |
-------|------------------------------------------------------
| | |
Porthos | | |
| | |
-------|------------------------------------------------------
| | |
Aramis | | |
| | |
-------------------------------------------------------------
До сих пор мне удавалось:
Musketeers = c("Athos", "Porthos", "Aramis")
for(i in 1:length(Musketeers)) {
for(j in 1:length(Musketeers)) {
CombinedMatrix <- cbind (
rbind(MyList[grep(paste0("^(", Musketeers[i],
")(?=.*Versus[", Musketeers[j], "]"), names(MyList),
value = T, perl=T)])
)
}
}
То, что я пытался сделать, это объединить мою команду grep
(весьма важно, учитывая количество файлов и специфичность, с которой мне нужно их выбрать), а затем объединить rbind
и cbind
такчто строки и столбцы матрицы содержательно сцеплены.
Мой общий план состоял в том, чтобы объединить все кадры данных, начинающиеся с 'Athos', в один столбец, и сделать это еще раз для кадров данных, начинающихся с 'Porthos'и' Арамис ', а затем объединить эти три столбца по строкам в окончательный кадр данных.
Я знаю, что я довольно далеко, но я не могу понять, с чего начать.
Редактировать: @PierreGramme сгенерировал полезный набор данных модели, который я добавлю ниже, поскольку я думаю, что было бы полезно предоставить его первоначально.
Musketeers = c("Athos", "Porthos", "Aramis")
MyList = c("AthosVersusAthos.csv", "AthosVersusPorthos.csv", "AthosVersusAramis.csv",
"PorthosVersusAthos.csv", "PorthosVersusPorthos.csv", "PorthosVersusAramis.csv",
"AramisVersusAthos.csv", "AramisVersusPorthos.csv", "AramisVersusAramis.csv",
"BobVersusMary.csv", "LostCities.txt")
MyList = lapply(setNames(nm=MyList), function(x) matrix(rnorm(9), nrow=3, dimnames=list(c("a","b","c"), c("x","y","z"))) )