简体   繁体   English

为数据框中的一列创建列表列

[英]Creates list-column for one column in dataframe

I have a data set like below (I have already tidyed and grouped data): 我有一个如下数据集(我已经整理和分组了数据):

# A tibble: 2,903 x 5
# Groups: MarketName [201]
   MarketName                                  Season1Date                  x     y product   
   <chr>                                       <chr>                    <dbl> <dbl> <chr>     
 1 Abbotsford Farmers Market                   May to October           -90.3  44.9 Bakedgoods
 2 Amery Farmers Market                        June to October          -92.4  45.3 Bakedgoods
 3 Appleton Downtown Farm Market               06/18/2016 to 10/29/2016 -88.4  44.3 Bakedgoods
 4 Barker's Island Farmers Market              05/20/2017 to 10/28/2017 -92.1  46.7 Bakedgoods
 5 Black River Falls Community Farmers' Market 05/24/2014 to 10/25/2014 -90.8  44.3 Bakedgoods
 6 Black River Falls Downtown Farmer's Market  06/05/2014 to 09/25/2014 -90.9  44.3 Bakedgoods
 7 Boscobel Farmers Market                     05/09/2015 to 10/17/2015 -90.7  43.1 Bakedgoods
 8 Bristol Farmers Market                      June to October          -88.0  42.6 Bakedgoods
 9 Brookfield Farmers Market                   05/07/2016 to 10/29/2016 -88.1  43.1 Bakedgoods
10 Brown Deer Farmers Market                   06/14/2017 to 10/25/2017 -88.0  43.2 Bakedgoods
# ... with 2,893 more rows

I have many rows for each product per market. 每个市场的每种产品都有很多行。 for example I filtered out data for one specific MarketName and got this : 例如,我过滤出一个特定MarketName的数据并得到以下信息:

# A tibble: 11 x 4
# Groups: MarketName [1]
   MarketName               x     y product   
   <chr>                <dbl> <dbl> <chr>     
 1 Amery Farmers Market -92.4  45.3 Bakedgoods
 2 Amery Farmers Market -92.4  45.3 Cheese    
 3 Amery Farmers Market -92.4  45.3 Flowers   
 4 Amery Farmers Market -92.4  45.3 Herbs     
 5 Amery Farmers Market -92.4  45.3 Vegetables
 6 Amery Farmers Market -92.4  45.3 Honey     
 7 Amery Farmers Market -92.4  45.3 Jams      
 8 Amery Farmers Market -92.4  45.3 Maple     
 9 Amery Farmers Market -92.4  45.3 Meat      
10 Amery Farmers Market -92.4  45.3 Plants    
11 Amery Farmers Market -92.4  45.3 Soap

I am wondering, how can I turn the product column into list-column in order to have only one row per market with list of product. 我想知道如何将产品列变成列表列,以便每个市场的产品列表只有一行。 I would like to have something like this at the end: 我想在结尾处添加以下内容:

   MarketName               x     y product   
   <chr>                <dbl> <dbl> <chr>     
 1 Amery Farmers Market -92.4  45.3 Bakedgoods, Cheese, Flowers, Herbs ,etc.

Recreate data: 重新创建数据:

product <- c("Baked Goods", "Cheese", "Flowers",
               "Herbs", "Vegetables", "Honey",
               "Jams", "Maple", "Meat", "Plants", "Soap")

df <- data.frame(MarketName = "Amery Farmers Market", x = -92.4, y = 45.3, product = product, stringsAsFactors = FALSE) %>% as_tibble()

Nest solution 巢式解决方案

You can try nest if you want a list-col: 如果需要list-col,可以尝试nest:

df %>% nest(product)
# A tibble: 1 x 4
  MarketName               x     y data             
  <chr>                <dbl> <dbl> <list>           
1 Amery Farmers Market -92.4  45.3 <tibble [11 × 1]>

Summarize solution 总结解决方案

Or summarize if you want a string with all the names in it: 或总结一下,是否需要一个包含所有名称的字符串:

df %>%
  group_by(MarketName, x, y) %>%
  summarize(product = paste(product, collapse = ", "))
# A tibble: 1 x 4
# Groups:   MarketName, x [?]
  MarketName               x     y product                                                          
  <chr>                <dbl> <dbl> <chr>                                                            
1 Amery Farmers Market -92.4  45.3 Baked Goods, Cheese, Flowers, Herbs, Vegetables, Honey, Jams, Ma…

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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