使用bind_rows / data.frame时将列表元素的名称设置为列

用户名

我正在尝试处理许多列表,但我丢失了names某些列表元素。

该列表如下所示:

> myLists2
[[1]]
NULL

[[2]]
[[2]][[1]]
                         title                        company                     date_range                       location 
            "Founder | Co-CEO"                  "someCompany" "ene. de 2018 \023 actualidad"                       "Europe" 
                   description                 li_company_url 
          "some description 1"       "https://www.google.com" 

[[2]][[2]]
                         title                        company                     date_range                       location 
               "Another title"                 "someCompany2" "ene. de 2019 \023 actualidad"                          "USA" 
                   description                 li_company_url 
         "Another Description"        "https://www.yahoo.com" 

[[2]][[3]]
                          title                         company                      date_range                        location 
              "Another title 3"             "Another company 3" "sept. de 2018 \023 actualidad"                        "Europe" 
                    description                  li_company_url 
        "Another description 3" "https://www.stackexchange.com" 

如果在哪里跑步,names(myLists2[[2]][[1]])我会得到以下信息:

[1] "title"          "company"        "date_range"     "location"       "description"    "li_company_url"

在不同的列表中,名称的数量可能会略有不同,我想创建一个新列,该列出names现在中data.frame

运行:

hh <- myLists2[[2]] %>% data.frame() %>% rownames_to_column("tag")

给了我一个不错的数据框,在这里我使用该rownames_to_column()函数保存行名,但是当列表元素的长度不同时,这给我一个错误。

错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,:参数表示行数不同:5,6

我发现对此的解决方案是使用bind_rows()运行:

myLists2[[2]] %>% bind_rows()

给我一个,tibble但我names从列表中丢失了运行:

myLists2[[2]] %>% bind_rows(.id = "myID")

似乎也不能解决问题,因为它给了我一个新的列,从1到3。

我的问题是,我该如何使用bind_rows()(对不同的列长不敏感)并将其names从列表另存为列?

数据:

myLists2 <- list(NULL, list(c(title = "Founder | Co-CEO", company = "someCompany", 
                              date_range = "ene. de 2018 \023 actualidad", location = "Europe", 
                              description = "some description 1", li_company_url = "https://www.google.com"
), c(title = "Another title", company = "someCompany2", date_range = "ene. de 2019 \023 actualidad", 
     location = "USA", description = "Another Description", li_company_url = "https://www.yahoo.com"
), c(title = "Another title 3", company = "Another company 3", 
     date_range = "sept. de 2018 \023 actualidad", location = "Europe", 
     description = "Another description 3", li_company_url = "https://www.stackexchange.com"
)))

编辑:(添加新列表)

myNewList <- list(list(c(title = "Founder | Co-CEO", company = "some company", 
            date_range = "ene. de 2018 \023 actualidad", location = "Europe", 
            description = "some description", 
            li_company_url = "https://www.google.com"
), c(title = "some thing here", company = "some company", 
     date_range = "ene. de 2019 \023 actualidad", location = "USA", 
     description = "another description", 
     li_company_url = "https://www.yahoo.com")
), list(c(title = "CEO", company = "another company", 
           date_range = "2012 \023 actualidad", description = "some other description", 
           li_company_url = ""), c(title = "job title", 
                                   company = "company name", date_range = "ene. de 2005 \023 actualidad", 
                                   location = "Europe", description = "company description", 
                                   li_company_url = "https://www.yahoo.com"), 
         c(title = "job title 2", company = "company name", date_range = "1995 \023 actualidad", 
           description = "description", 
           li_company_url = ""), c(title = "job title", 
                                   company = "company name", date_range = "1992 \023 1995", 
                                   location = "USA", description = "soem company description", 
                                   li_company_url = ""), c(title = "company title", company = "company name", 
                                                           date_range = "1990 \023 1992", description = "Another description", 
                                                           li_company_url = "")), NULL)

这些显示了我遇到的问题:

map(myNewList, ~data.frame(.x))
map(myNewList[1], ~data.frame(.x)) # runs okay and I keep the names
map(myNewList[2], ~data.frame(.x)) # errors
map(myNewList, ~bind_rows(.x))    # runs okay but I lsoe the names
阿克伦

我们可以使用map_ifdata.table::transpose后做的bind_rows

library(purrr)
library(dplyr)
library(tibble)
library(data.table)
map_if(myNewList, .p = ~ length(.) > 0,
                .f =  ~bind_rows(.x) %>% 
                         data.table::transpose(., keep.names = 'title') %>%
                         column_to_rownames('title'),
                 .else = ~ NA_character_)

-输出

#[[1]]
#                                         V1                           V2
#title                      Founder | Co-CEO              some thing here
#company                        some company                 some company
#date_range     ene. de 2018 \023 actualidad ene. de 2019 \023 actualidad
#location                             Europe                          USA
#description                some description          another description
#li_company_url       https://www.google.com        https://www.yahoo.com

#[[2]]
#                                   V1                           V2                   V3                       V4
#title                             CEO                    job title          job title 2                job title
#company               another company                 company name         company name             company name
#date_range       2012 \023 actualidad ene. de 2005 \023 actualidad 1995 \023 actualidad           1992 \023 1995
#description    some other description          company description          description soem company description
#li_company_url                               https://www.yahoo.com                                              
#location                         <NA>                       Europe                 <NA>                      USA
#                                V5
#title                company title
#company               company name
#date_range          1990 \023 1992
#description    Another description
#li_company_url                    
#location                      <NA>

#[[3]]
#[1] NA

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

减少/调用data.frames列表中的bind_rows

如何在`bind_rows`引入的data.frame中删除冗余列?

如何在表列表中使用 bind_rows?

使用bind_rows将命名向量转换为df

如何rbind()/ dplyr :: bind_rows()/ data.table :: rbindlist()包含数据帧列的数据帧?

如何使用bind_rows()合并数据集,同时将数据集的名称保留为变量

使用bind_rows将向量列表转换为数据帧

在使用bind_rows()之前如何删除列表中的空数据框?

错误:将读取器格式0.1.1更新为0.2.0后使用dplyr :: bind_rows时,数据帧损坏

R - 将 bind_rows 用于子集对象列表

R:对列表进行操作的dplyr :: bind_rows()?

使用Dplyr :: Bind_Rows和Purrr在数据框列表中有选择地绑定不同的数据框

根据名称有条件地将rbind或bind_rows应用于列表

如何使用bind_rows将多个数据框与名为日期的行绑定?我收到错误消息:bind_rows_(x,.id)错误:参数1必须具有名称

在嵌套列表上使用as.data.frame时的列名称

imap_dfr 从 R 中的列表列表到 bind_rows

R bind_rows()错误:参数1必须具有名称

Bind_rows()错误:“参数1必须具有名称” // tidyverse更新后发生

在 Rstudio 中的 dplyr 的“bind_rows”期间,数据层次结构中缺少名称 - 获取 Okex Ticker

dplyr:带有rbind_all和bind_rows的数据帧矢量列表

dplyr :: bind_rows在合并列出的小标题时不起作用

为什么rbind()和bind_rows()不能在组合这些SF对象时起作用?

在 R 中绑定它们时,bind_rows() 创建每个数据帧的副本

bind_rows(),列不能从整数转换为字符错误

在同一data.tables上执行bind_rows()和rbind()之后,是否完全相同()= FALSE?

使用 map 函数过滤具有列表名称的 data.frame 元素

r 函数调用,带有 2 个参数列表和现有的 bind_rows

错误:无法使用 bind_rows 组合 <character> 和 <double>

将 Pandas Data Frame 列建模为类别列表