以特定方式转换为宽格式

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))

【讨论】:

以上是关于以特定方式转换为宽格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在Excel中将长表格转换为宽表格?

如何以日期格式转换特定excel文件的列?

在 BigQuery 中将长表转换为宽表

python pandas 长表格转换为宽表格/宽表格转换为长表格

如何将 DateTime 转换为/从特定的字符串格式(两种方式,例如给定格式为“yyyyMMdd”)?

将字符串宏/常量转换为宽字符/Unicode