首页 > 解决方案 > 聚合 R 后包含列表的数据表

问题描述

这可以通过以下两种方式之一来解决。我想我错误地使用了 aggregate() 函数——尽管结果接近我想要的。

我在用:

WS_PART = aggregate(PART_WS_Pct$niin_id~PART_WS_Pct$ws_category,  PART_WS_Pct, FUN=function(x) unique(x))  

在某种程度上,结果几乎是我想要的。它包含一个主要类别,然后是该类别下所有部分的列表。只是,数据的第二列是一个实际的列表。

我基本上想为每个包含所有部分的 ws_category 制作一个列表。

现在数据看起来像这样:

MY_CAT1, c("000245290", "000763050", "001218656", "001506526")
MY_CAT2, c("2343","2366")

我只有几个类别,所以我认为这可能是一个很好的交叉表。类别作为标题,PART #'s 作为行,每列包含某种指示符,如 TRUE/FALSE 或 0/1。

我愿意接受更多建议,但这是我能想到的两个。更糟糕的是,我可以将列表转换为字符并以这种方式进行一些操作?

有什么建议吗?

标签: rlistdata.tablecrosstab

解决方案


概述

我认为正在发生的事情是每个ws_category. 为了解决这个问题,您必须将数据从每个ws_cartegory的一行转换为每个ws_category 及其对应部分的一行。

为此,请用棒球参考来幽默我。许多伟大的球员从未为赢得世界大赛的球队效力,而有些球员似乎发现自己在职业生涯中获得了多枚戒指。

在这里,df包含三行,一行用于Ron SantoHenry BlancoJohn Lester。桑托和布兰科都没有为赢得世界大赛的球队效力。然而,莱斯特是两支冠军球队的一员。

为了扩大df它以使每个棒球运动员他们相应的世界大赛冠军年份拥有一排,我想到了两种解决方案:

  1. :使用tidyr::unnest();或者

  2. 对 World Series 列中未列出的对象同时使用baseutils包。stack()

代码

# load necessary packages
library( tidyverse )

# make data
df <-
  data.frame( Name = c("Ron Santo", "Henry Blanco", "John Lester") )

# add WS Championship Years
df$WS_Champion <-
  list( NA, NA, c(2013, 2016) )

# view results
df
#           Name WS_Champion
# 1    Ron Santo          NA
# 2 Henry Blanco          NA
# 3  John Lester  2013, 2016

# base R solution

# name the objects within the list column
# with their corresponding `Name` value
names( df$WS_Champion ) <- df$Name

# unlist each object within the list column
# and stack the vectors into a data frame
df.stacked <-
  utils::stack( x = lapply( X = df$WS_Champion, FUN = unlist ) )

# rename the columns
colnames( df.stacked ) <- c("WS_Champion", "Name")

# view results
df.stacked
#   WS_Champion         Name
# 1          NA    Ron Santo
# 2          NA Henry Blanco
# 3        2013  John Lester
# 4        2016  John Lester

# tidyverse solution

# unnest df so that 'Name' repeats for every value in 'WS_Champion'
df <-
  unnest( data = df )

# view results
df
#           Name WS_Champion
# 1    Ron Santo          NA
# 2 Henry Blanco          NA
# 3  John Lester        2013
# 4  John Lester        2016

# end of script # 

会话信息

R version 3.4.4 (2018-03-15)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.2

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods  
[7] base     

other attached packages:
[1] forcats_0.3.0   stringr_1.3.0   dplyr_0.7.4     purrr_0.2.4    
[5] readr_1.1.1     tidyr_0.8.0     tibble_1.4.2    ggplot2_2.2.1  
[9] tidyverse_1.2.1

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.16     cellranger_1.1.0 pillar_1.2.1    
 [4] compiler_3.4.4   plyr_1.8.4       bindr_0.1.1     
 [7] tools_3.4.4      lubridate_1.7.3  jsonlite_1.5    
[10] nlme_3.1-131.1   gtable_0.2.0     lattice_0.20-35 
[13] pkgconfig_2.0.1  rlang_0.2.0      psych_1.7.8     
[16] cli_1.0.0        rstudioapi_0.7   yaml_2.1.18     
[19] parallel_3.4.4   haven_1.1.1      bindrcpp_0.2    
[22] xml2_1.2.0       httr_1.3.1       hms_0.4.2       
[25] grid_3.4.4       glue_1.2.0       R6_2.2.2        
[28] readxl_1.0.0     foreign_0.8-69   modelr_0.1.1    
[31] reshape2_1.4.3   magrittr_1.5     scales_0.5.0    
[34] rvest_0.3.2      assertthat_0.2.0 mnormt_1.5-5    
[37] colorspace_1.3-2 stringi_1.1.7    lazyeval_0.2.1  
[40] munsell_0.4.3    broom_0.4.3      crayon_1.3.4 

推荐阅读