R Список списков в фрейм данных с именем списка в качестве дополнительного столбца

У меня есть список списков с именами.

Я хочу 9X_base-r добавить их все вместе в фрейм данных, но 9X_base-r сохранить все столбцы

past_earnings_lists[1]

успешно возвращает 9X_r один список из списка списков

names(past_earnings_lists)[1]

успешно возвращает 9X_reshape2 имя списка

past_earnings <- melt(past_earnings_lists)

помещает все данные в один фрейм 9X_r данных, но не сохраняет структуру

past_earnings <- as.data.frame.matrix(past_earnings_lists$ADBE)

успешно 9X_r берет один список и сохраняет структуру, но 9X_r-language не добавляет имя списка в фрейм данных.

Например, в 9X_rstats adbe 7 столбцов и 30 строк, я хочу, чтобы 9X_base-r он добавил 8-й столбец с именем adbe и добавил 9X_reshape2 его в фрейм данных, а все остальные списки 9X_rstats сделали то же самое.

9X_R Список списков в фрейм данных с именем списка в качестве дополнительного столбца_r-language

i want a dataframe with the results being
  sym  v1 v2 v3 v4 v5 v6 v7
1 adbe  1  2  3  4  5  6  7
2 adbe  1  2  3  4  5  6  7
3 air   1  2  3  4  5  6  7
4 air   1  2  3  4  5  6  7
5 alog  1  2  3  4  5  6  7
and so on

9
2

  • Согласились, что вряд ли вы найдете помощь без предоставления структуры данных, чтобы сделать ее воспроизводимым примером, но вы можете найти ...
3
Общее количество ответов: 3

Ответ #1

Ответ на вопрос: R Список списков в фрейм данных с именем списка в качестве дополнительного столбца

Это может сработать

library(purrr)
ans <- map_df(past_earnings_lists, ~as.data.frame(.x), .id="id")

Он использует map_df, который 9X_base-r отображает списки и преобразует результат 9X_r-language во фреймы данных (если возможно). Используйте 9X_reshape2 аргумент .id, чтобы добавить names в каждый фрейм 9X_base-r данных в виде столбца.

30
0

Ответ #2

Ответ на вопрос: R Список списков в фрейм данных с именем списка в качестве дополнительного столбца

как прокомментировал @dshkol, проще всего 9X_base-r использовать dplyr::bind_rows:

d = data.frame(letter = LETTERS, number = 1:26)
d.list = list(d1 = d, d2 = d)
d.all = dplyr::bind_rows(d.list, .id = "variable")

Вы также можете сделать это 9X_base-r в базе R с помощью rbind и do.call:

d.all = do.call(rbind, d.list)

Однако это не даст 9X_r-language вам столбец, содержащий имена списков. Вы 9X_rstats можете разобрать его из row.names, хотя:

d.all["variable"] = unlist(lapply(
  strsplit(row.names(d.all), ".", fixed = TRUE), function(x) x[[1]])
)

В качестве 9X_r-language альтернативы можно просмотреть фреймы фреймов 9X_rstats данных и добавить метку вручную перед привязкой:

for (n in names(d.list))
  d.list[[n]]['name'] = n
d.all = do.call(rbind, d.list)

Однако 9X_r похоже, что у ваших фреймов данных нет имен столбцов. Я думаю, вам 9X_rstats нужно исправить это, чтобы оба решения работали.

3
0

Ответ #3

Ответ на вопрос: R Список списков в фрейм данных с именем списка в качестве дополнительного столбца

@mikeck был на правильном пути. Разделить 9X_r строку с помощью . сложно, поскольку регулярное 9X_r-language выражение . соответствует любому символу. Итак, нам 9X_r нужен escape-символ \ перед .. Для тех, кто 9X_base-r хочет добиться этого с помощью базы R, вы 9X_reshape2 можете попробовать следующее:

df <- do.call(rbind, list)
df$listname <- lapply(strsplit(row.names(df), "\\."), '[[', 1)

1
0