这可以通过两种方式之一解决。我认为我正在使用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#为行,每列包含某种指示符,如TRUE / FALSE或0/1。
我愿意接受更多建议,但这些是我能想到的。更糟糕的情况是,我可以将列表转换为字符并以这种方式进行一些操作吗?
有什么建议吗?
答案 0 :(得分:1)
我认为发生的事情是每个ws_category
中的部件数量存在差异。要解决此问题,您必须将每个ws_cartegory
的数据从一行转换为每个ws_category
和相应部分的一行。
要做到这一点,请用棒球参考幽默我。许多伟大的球员从来没有为赢得世界大赛的球队效力,而有些球员似乎发现自己在他们的球员身上赢了多个戒指。
此处,df
包含三行,一行用于Ron Santo,Henry Blanco和John Lester。 Santo和Blanco都没有参加过赢得世界大赛的球队。然而,莱斯特是两支冠军球队的一员。
为了扩展df
以使每个棒球运动员和拥有一排他们相应的世界系列赛冠军年,我们会想到两个解决方案:
# 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