Как сохранить вывод цикла над вложенным списком - PullRequest
0 голосов
/ 23 октября 2019

У меня есть список вложенных фреймов данных:

set.seed(1)
S1 = data.frame(replicate(2,sample(0:130,30,rep=TRUE)))
S2 = data.frame(replicate(2,sample(0:130,34,rep=TRUE)))
S3 = data.frame(replicate(2,sample(0:130,21,rep=TRUE)))
S4 = data.frame(replicate(2,sample(0:130,26,rep=TRUE)))
df_list1 = list(S1 = S1, S2 = S2, S3 = S3, S4 = S4)

set.seed(2)
S1 = data.frame(replicate(2,sample(0:130,30,rep=TRUE)))
S2 = data.frame(replicate(2,sample(0:130,34,rep=TRUE)))
S3 = data.frame(replicate(2,sample(0:130,21,rep=TRUE)))
S4 = data.frame(replicate(2,sample(0:130,26,rep=TRUE)))
df_list2 = list(S1 = S1, S2 = S2, S3 = S3, S4 = S4)

set.seed(3)
S1 = data.frame(replicate(2,sample(0:130,30,rep=TRUE)))
S2 = data.frame(replicate(2,sample(0:130,34,rep=TRUE)))
S3 = data.frame(replicate(2,sample(0:130,21,rep=TRUE)))
S4 = data.frame(replicate(2,sample(0:130,26,rep=TRUE)))
df_list3 = list(S1 = S1, S2 = S2, S3 = S3, S4 = S4)

set.seed(4)
S1 = data.frame(replicate(2,sample(0:130,30,rep=TRUE)))
S2 = data.frame(replicate(2,sample(0:130,34,rep=TRUE)))
S3 = data.frame(replicate(2,sample(0:130,21,rep=TRUE)))
S4 = data.frame(replicate(2,sample(0:130,26,rep=TRUE)))
df_list4 = list(S1 = S1, S2 = S2, S3 = S3, S4 = S4)

df_list = list (df_list1, df_list2, df_list3, df_list4)
names(df_list) = c("AB_df", "BC_df", "DE_df", "FG_df")

Я хочу извлечь первый столбец каждого фрейма данных с помощью цикла и сохранить его в списке. Моя проблема сейчас, как сделать цикл, чтобы сохранить его правильно. Какой бегущий индекс мне нужно использовать? Я пробовал разные версии, но ничего не получалось. Это мой код, и теперь мне нужно знать, что использовать вместо ???

datalist = list()
for (a in 1:length(df_list)) {
  for (b in 1:length(df_list[[1]])) {
    datalist[[?????]] = df_list[[a]][[b]][1]}}

. Чтобы сделать его более понятным: В качестве вывода я хочу получить список, содержащий каждый 1-й столбец всех 16 информационных фреймов. Итак, 16 записей в списке.

1 Ответ

1 голос
/ 23 октября 2019

purrr отлично работает здесь.

library(purrr)

datalist <-
  df_list %>% 
  # prepend top level names to dataframe names
  imap(~ set_names(.x, function(nms) {paste(.y, nms, sep = "-")})) %>% 
  flatten() %>% 
  map(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...