【发布时间】:2017-12-25 00:37:13
【问题描述】:
我正在尝试输出分组汇总变量以及相应的识别变量列表。
以dplyr::starwars 数据集为例,我想计算具有“浅”肤色的字符数,按性别分组,并在单独的输出列中使用与每个匹配项对应的名称向量。
在实际用例中,summarise 的条件不止一种,唯一标识符可能是subjectID/studyID/等。我对data.table 解决方案持开放态度,更喜欢基于矢量、R Shiny 友好、易于转换为函数的解决方案。
来自dplyr::starwars的示例:
starwars %>%
filter(species %in% c("Human", "Droid")) %>%
group_by(gender) %>%
summarise(
skin = sum(skin_color=="light", na.rm=T),
hair = sum(hair_color=="brown", na.rm=T)
)
期望的输出:
gender skin hair skinname hairname
female 6 6 femname1, femname2, femname3, femname4, femname5, femname6 femhname1, femhname2, femhname3, femhname4, femhname5, femhname6
male 5 8 mname1, mname2, mname3, mname4, mname5 mhname1, mhname2, mhname3, mhname4, mhname5, mhname6, mhname7 mhname8
none 0 0
<NA> 0 0
然后,此输出将使用t() 转置,并使用paste() 在DT(数据表)中创建匹配名称的悬停显示。
我想我需要类似的东西
skinname = as.list(.$name[which(skin_color == "light")])
在summarise 步骤中,或者可能是在summarise/mutate 中带有do.call 的自定义函数。
【问题讨论】: