从宽到长重塑数据? [复制]

Posted

技术标签:

【中文标题】从宽到长重塑数据? [复制]【英文标题】:Reshape data from wide to long? [duplicate] 【发布时间】:2012-12-01 19:24:27 【问题描述】:

如何重塑这些广泛的数据:(来自 csv 文件)

Name    Code    Indicator     1960    1961    1962  

进入这种长格式?

Name    Code    Indicator     Year

【问题讨论】:

【参考方案1】:

reshape2 包通过函数 melt 很好地完成了这一点。

yourdata_melted <- melt(yourdata, id.vars=c('Name', 'Code', 'Indicator'), variable.name='Year')

这将添加一列value,您可以删除它。 yourdata_melted$value &lt;- NULL

【讨论】:

【参考方案2】:

仅仅因为我喜欢继续使用基本 R 函数的活动:

测试数据:

test <- data.frame(matrix(1:12,nrow=2))
names(test) <- c("name","code","indicator","1960","1961","1962")
test

  name code indicator 1960 1961 1962
1    1    3         5    7    9   11
2    2    4         6    8   10   12

现在重塑它!

reshape(
   test,
   idvar=c("name","code","indicator"),
   varying=c("1960","1961","1962"),
   timevar="year",
   v.names="value",
   times=c("1960","1961","1962"),
   direction="long"
)

#           name code indicator year value
#1.3.5.1960    1    3         5 1960     7
#2.4.6.1960    2    4         6 1960     8
#1.3.5.1961    1    3         5 1961     9
#2.4.6.1961    2    4         6 1961    10
#1.3.5.1962    1    3         5 1962    11
#2.4.6.1962    2    4         6 1962    12

【讨论】:

我也尝试为 base R reshape 进行宣传--它的速度很快,而且在你使用过几次之后也不太难使用--但它看起来像“reshape2”中的功能" 包是唯一能得到爱的。 加 1 只是为了争取基本 R 功能的努力。【参考方案3】:

tidyr

gather(test, "time", "value", 4:6)

数据

test <- data.frame(matrix(1:12,nrow=2))
names(test) <- c("name","code","indicator","1960","1961","1962")

【讨论】:

以上是关于从宽到长重塑数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 使用从宽到长的结构重塑表

R,通过提取前缀从宽到长旋转。整齐划一

使用多个变量和一些时间不变将数据框从宽重塑为面板

将时间序列数据从宽格式重塑为高格式(用于绘图)[重复]

在熊猫中重塑宽到长

R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)如果没有指定行标识符号,则所有的字段都会放入variable变量中