r - 如何将嵌套列表转换为数据框

标签 r list dataframe data-binding

我抓取一个网址并得到一个嵌套列表。在下一步中,我想将其转换为数据框。但我的解决方案不起作用。我认为问题在于列表项有名称,在转换之前我无法删除它。希望您能给一些提示。

require(tidyverse)
require(rvest)

#create a list, which looks like this what I get after webscrape ( my code for scraping is at the end)
item1 <- data.frame(id_course1 = c("id_course1", "id_course1"),
                    course1 = c("participants", 15),
                    course1 = c("mark1", 1),
                    course1 = c("mark2", 2),
                    course1 = c("mark3", 3),
                    course1 = c("mark4", 4),
                    course1 = c("mark5", 5))
item2 <- data.frame(id_course2 = c("id_course2", "id_course2"),
                    course2 = c("participants", 30),
                    course2 = c("mark1", 10),
                    course2 = c("mark2", 8),
                    course2 = c("mark3", 6),
                    course2 = c("mark4", 4),
                    course2 = c("mark5", 2))
item3 <- data.frame(id_course3 = c("id_course3", "id_course3"),
                    course3 = c("participants", 15),
                    course3 = c("mark1", 2),
                    course3 = c("mark2", 4),
                    course3 = c("mark3", 5),
                    course3 = c("mark4", 3),
                    course3 = c("mark5", 1))
my.list <- list(item1, item2, item3)

#create dataframe, but the result is not what I want
require(data.table)
data.table::rbindlist(my.list, fill=TRUE)
dplyr::bind_rows(my.list)
dplyr::bind_rows(unname(my.list))

# try to use only the second row of the table, but the result is not what I want
do.call("cbind", lapply(my.list, "[[", 2) )
do.call("rbind", lapply(my.list, "[[", 2) )
lapply(my.list, "[[", 2) %>% dplyr::bind_rows

#at the end I want a table that looks like this
df_what_i_want <- data.frame(t(data.frame(c("id_course1", 15, 1, 2, 3, 4, 5 ),
                                        c("id_course2", 30, 10, 8, 6, 4, 2 ),
                                        c("id_course3", 15, 2, 4, 5, 3, 1 ))))
rownames(df_what_i_want) <- NULL
colnames(df_what_i_want) <- c("id_course1", "participants", "mark1", "mark2", "mark3", "mark4", "mark5" )


# scrape the website
url <- "https://www.fernuni-hagen.de/wirtschaftswissenschaft/studium/klausurstatistik.shtml"
courses_list <- read_html(url) %>%
  html_nodes("li") %>%
  html_nodes("table") %>%
  html_table(fill = TRUE) 

最佳答案

这也可以

library(janitor)
library(tidyverse)
map_dfr(my.list, ~(as.data.frame(.) %>% janitor::row_to_names(1) %>% setNames(my.list[[1]][1,])))

  id_course1 participants mark1 mark2 mark3 mark4 mark5
1 id_course1           15     1     2     3     4     5
2 id_course2           30    10     8     6     4     2
3 id_course3           15     2     4     5     3     1

关于r - 如何将嵌套列表转换为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66813896/

相关文章:

python - 比较两个集合列表

java - android - 为两个列表包装器创建通用接口(interface)

r - 更改 for 循环以覆盖多个文件

python - matplotlib 美国国债 yield 曲线

python - 如何从单个 pandas 数据帧列的值中选择大小为 n 的随机样本,且重复值最多出现 2 次?

r - R中的Bron-Kerbosch算法

r - 在列表列表中出现的频率

r - 如何将 sf 空间点列表转换为可路由图

r - 是否有与 plyr::join_all 等效的 dplyr 或 data.table?通过数据框列表加入?

r - group_rows()命令中换行时的缩进 - R markdown 中的 kableExtra 包