简体   繁体   中英

Add a column of dataframes to an existing dataframe column in R?

I have a dataframe of companies and a separate dataframe with the categories I want to assess each of those companies by; what I want to do is add my dataframe of categories as a column of dataframes to company data and then unnest() that column. In the end I want to make an excel/csv file that my team can use to track how the companies are assessed.

Here's my data:

companies <- tibble(company = c("company_a", "company_b", "company_c"))

# and here's the structure for my assessment criteria

structure(list(id = c(NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_), evaluator = c(NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_), subawardee_name = c(NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_), 
    category = c("category_1", "category_1", "category_1", "category_1", 
    "category_1", "category_2", "category_2", "category_2", "category_2", 
    "category_2", "category_3", "category_3", "category_3", "category_3", 
    "category_3", "category_4", "category_4", "category_4", "category_4", 
    "category_4"), level = c("Ownership", "Leadership", "Employees", 
    "Operations", "Product", "Ownership", "Leadership", "Employees", 
    "Operations", "Product", "Ownership", "Leadership", "Employees", 
    "Operations", "Product", "Ownership", "Leadership", "Employees", 
    "Operations", "Product"), rating = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_), excerpt = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), source = c(NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -20L))

So I want to join this dataframe as a single row to each company. I've tried this, which hasn't worked:

companies %>% 
    group_by(company) %>% 
    mutate(data = assessment_criteria)

Error: Column `data` is of unsupported class data.frame

I've also tried various joins with combinations of map_df and map2_df . Any thoughts here?

You just instead need to provide the data frames in list format.

library(dplyr)

companies_nest <- companies %>%
  mutate(data = list(other_data)) 

companies_nest
#> # A tibble: 3 x 2
#>   company   data             
#>   <chr>     <list>           
#> 1 company_a <tibble [20 x 8]>
#> 2 company_b <tibble [20 x 8]>
#> 3 company_c <tibble [20 x 8]>

You can then unnest as necessary.

library(tidyr)
companies_nest %>%
  unnest(cols = c(data))
#> # A tibble: 60 x 9
#>    company  id    evaluator subawardee_name category level rating excerpt source
#>    <chr>    <chr> <chr>     <chr>           <chr>    <chr> <chr>  <chr>   <chr> 
#>  1 company~ <NA>  <NA>      <NA>            categor~ Owne~ <NA>   <NA>    <NA>  
#>  2 company~ <NA>  <NA>      <NA>            categor~ Lead~ <NA>   <NA>    <NA>  
#>  3 company~ <NA>  <NA>      <NA>            categor~ Empl~ <NA>   <NA>    <NA>  
#>  4 company~ <NA>  <NA>      <NA>            categor~ Oper~ <NA>   <NA>    <NA>  
#>  5 company~ <NA>  <NA>      <NA>            categor~ Prod~ <NA>   <NA>    <NA>  
#>  6 company~ <NA>  <NA>      <NA>            categor~ Owne~ <NA>   <NA>    <NA>  
#>  7 company~ <NA>  <NA>      <NA>            categor~ Lead~ <NA>   <NA>    <NA>  
#>  8 company~ <NA>  <NA>      <NA>            categor~ Empl~ <NA>   <NA>    <NA>  
#>  9 company~ <NA>  <NA>      <NA>            categor~ Oper~ <NA>   <NA>    <NA>  
#> 10 company~ <NA>  <NA>      <NA>            categor~ Prod~ <NA>   <NA>    <NA>  
#> # ... with 50 more rows

Data

companies <- tibble(company = c("company_a", "company_b", "company_c"))

other_data <- structure(list(id = c(NA_character_, NA_character_, NA_character_, 
                      NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                      NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                      NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                      NA_character_, NA_character_), evaluator = c(NA_character_, NA_character_, 
                                                                   NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                   NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                   NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                   NA_character_, NA_character_, NA_character_), subawardee_name = c(NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_, NA_character_), 
               category = c("category_1", "category_1", "category_1", "category_1", 
                            "category_1", "category_2", "category_2", "category_2", "category_2", 
                            "category_2", "category_3", "category_3", "category_3", "category_3", 
                            "category_3", "category_4", "category_4", "category_4", "category_4", 
                            "category_4"), level = c("Ownership", "Leadership", "Employees", 
                                                     "Operations", "Product", "Ownership", "Leadership", "Employees", 
                                                     "Operations", "Product", "Ownership", "Leadership", "Employees", 
                                                     "Operations", "Product", "Ownership", "Leadership", "Employees", 
                                                     "Operations", "Product"), rating = c(NA_character_, NA_character_, 
                                                                                          NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                          NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                          NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                          NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                          NA_character_, NA_character_), excerpt = c(NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                     NA_character_, NA_character_, NA_character_), source = c(NA_character_, 
                                                                                                                                                                                              NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                                                                              NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                                                                              NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                                                                              NA_character_, NA_character_, NA_character_, NA_character_, 
                                                                                                                                                                                              NA_character_, NA_character_, NA_character_)), class = c("tbl_df", 
                                                                                                                                                                                                                                                       "tbl", "data.frame"), row.names = c(NA, -20L))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM