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 сделали то же самое.
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
- Согласились, что вряд ли вы найдете помощь без предоставления структуры данных, чтобы сделать ее воспроизводимым примером, но вы можете найти ...
Ответ #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 данных в виде столбца.
Ответ #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
Ответ на вопрос: 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)
-
3
-
4
-
7
-
2
-
9
-
7
-
3
-
1
-
2
-
2
-
1
-
1
-
3
-
5
-
1
-
2
-
2
-
2
-
2
-
2
-
1
-
1
-
1