以特定方式转换为宽格式
Posted
技术标签:
【中文标题】以特定方式转换为宽格式【英文标题】:Converting into wide format in a particular way 【发布时间】:2015-11-09 06:48:57 【问题描述】:在每个区域中,都会衡量各种摇滚乐队的表现。我们需要重新塑造,以便方便查看前 3 名品牌及其在每个领域的得分。给定的输入文件类似于
【问题讨论】:
添加一个排名变量(或只是排序),删除任何低于您指定排名的东西,然后进行基本的从长到宽的重塑。如果没有可重复的数据,您要求可能有兴趣回答问题的人付出很多努力。 这种类型的操作被称为“透视”或“取消透视”一个表。 (选择前3名后)有了这个词,我相信你会在CRAN上找到一些东西。 请勿以图片形式发布您的数据,请学习如何提供reproducible example 【参考方案1】:我们可以试试data.table
。将'data.frame'转换为'data.table'(setDT(df1)
),按'Area'分组,我们order
'PopularityScore'和前三行的子集(head(.SD,3)
),我们创建一个序列列('ind') 按“区域”分组,然后使用 dcast
重塑为宽格式。
library(data.table)#v1.9.6+
DT <- setDT(df1)[order(-PopularityScore), head(.SD,3) ,.(Area)][, ind:= 1:.N, Area]
dcast(DT, Area~ind, value.var=c('RockBand', 'PopularityScore'))
# Area RockBand_1 RockBand_2 RockBand_3 PopularityScore_1
#1: floridaChrist Rocus Metajones U3 87012
#2: sesam FlowerModes Scouting U3 51326
# PopularityScore_2 PopularityScore_3
#1: 43136 17969
#2: 36622 30839
数据
df1 <- data.frame(Area = rep(c('sesam', 'floridaChrist'), c(8,6)),
RockBand= c('FlowerModes', 'Scouting', 'U3', 'MetaJones', 'Rocus',
'Britpi', 'Californi',
'SystemOfDown', 'Rocus', 'Metajones', 'U3',
'FlowerModes', 'Scouting', 'Britpi'), PopularityScore=c(51326, 36622,
30839, 543, 197, 115,70, 3294, 87012, 43136, 17969, 6425, 4383, 3955))
【讨论】:
以上是关于以特定方式转换为宽格式的主要内容,如果未能解决你的问题,请参考以下文章
python pandas 长表格转换为宽表格/宽表格转换为长表格