r - 聚合 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。
我愿意接受更多建议,但这是我能想到的两个。更糟糕的是,我可以将列表转换为字符并以这种方式进行一些操作?
有什么建议吗?
解决方案
概述
我认为正在发生的事情是每个ws_category
. 为了解决这个问题,您必须将数据从每个ws_cartegory
的一行转换为每个ws_category
及其对应部分的一行。
为此,请用棒球参考来幽默我。许多伟大的球员从未为赢得世界大赛的球队效力,而有些球员似乎发现自己在职业生涯中获得了多枚戒指。
在这里,df
包含三行,一行用于Ron Santo、Henry Blanco和John Lester。桑托和布兰科都没有为赢得世界大赛的球队效力。然而,莱斯特是两支冠军球队的一员。
为了扩大df
它以使每个棒球运动员和他们相应的世界大赛冠军年份拥有一排,我想到了两种解决方案:
tidyverse:使用
tidyr::unnest()
;或者
代码
# 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
推荐阅读
- unicode - 使用十六进制名称组合字符
- powershell - Powershell - 遍历数组
- node.js - 无法使用 Angular 7 将授权标头发送到节点 11/Express 4 服务器
- r - ggsave 给出空白的 jpeg 图像
- python - 熊猫:提高滚动窗口的速度(应用自定义功能)
- bash - 如何使用 makefile 函数中的 if 语句?
- machine-learning - 目标大多为零的神经网络
- java - 是否有可能在启动新活动后,前一个活动继续通过意图向新活动发送数据?
- r - 循环遍历日期返回 null
- javascript - 如何防止点击 Ion.RangeSlider 中的间隔?