#r #list
#r #Список
Вопрос:
У меня есть 3 фрейма данных:
df1 <- read.table(text = "ID V1 V2 V3 V4
A 1 2 3 4
B 5 6 7 8
C 9 10 11 12", stringsAsFactors = FALSE, header = TRUE)
df2 <- read.table(text = "ID V1 V2 V3 V4
D 13 14 15 16
E 17 18 19 20
F 21 22 23 24", stringsAsFactors = FALSE, header = TRUE)
df3 <- read.table(text = "ID V1 V2 V3 V4
G 25 26 27 28
H 29 30 31 32
I 33 34 35 35", stringsAsFactors = FALSE, header = TRUE)
Как я могу объединить эти три фрейма данных в список, не просто используя list
функцию для их объединения, но и сохраняя переменные.
Когда я ищу определенную переменную, я вижу, что они разделены фреймами данных, которые я ввел, например, если вызывается мой список test
:
test[[ID]]
df1 df2 df3
A D G
B E H
C F I
test[[V1]]
df1 df2 df3
1 13 25
5 17 29
9 21 33
Комментарии:
1. Я не совсем уверен, что вы хотите — вы имеете в виду, как
Map(data.frame, df1=df1, df2=df2, df3=df3)
?2. Трудно понять, почему вы хотели бы хранить данные таким образом; это не очень «R-подобное» решение. Было бы более обычным хранить каждый фрейм данных как элемент списка или объединять фреймы данных в один со столбцом для идентификации оригиналов.
3. Проблема решена, я пересмотрю свою структуру данных, большое спасибо @neilfws
Ответ №1:
Я согласен с мнением @neilfws в том, что это, по-видимому, необычная структура, которую вы хотели бы иметь. Возможно, вам следует сделать шаг назад и переосмыслить, что именно вы хотели бы сделать с данными ниже по потоку и существует ли лучшая структура для достижения этой цели.
Помимо этого, вы можете создать такую структуру следующим образом
Прежде всего, сохраните отдельные data.frame
s в именованном list
.
lst <- list(df1 = df1, df2 = df2, df3 = df3)
Затем следующее воспроизводит ваш ожидаемый результат
setNames(
lapply(seq_along(lst[[1]]), function(idx) sapply(lst, function(x) x[, idx])),
names(lst[[1]]))
#$ID
# df1 df2 df3
#[1,] "A" "D" "G"
#[2,] "B" "E" "H"
#[3,] "C" "F" "I"
#
#$V1
# df1 df2 df3
#[1,] 1 13 25
#[2,] 5 17 29
#[3,] 9 21 33
#
#$V2
# df1 df2 df3
#[1,] 2 14 26
#[2,] 6 18 30
#[3,] 10 22 34
#
#$V3
# df1 df2 df3
#[1,] 3 15 27
#[2,] 7 19 31
#[3,] 11 23 35
#
#$V4
# df1 df2 df3
#[1,] 4 16 28
#[2,] 8 20 32
#[3,] 12 24 35
Это предполагает, что все data.frame
s имеют идентичную структуру столбцов.
Комментарии:
1. Большое вам спасибо, я еще раз рассмотрю свою цель