объединить несколько фреймов данных в список, сохранив переменные в r

#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. Большое вам спасибо, я еще раз рассмотрю свою цель