从宽到长重塑数据? [复制]
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 <- 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 Rreshape
进行宣传--它的速度很快,而且在你使用过几次之后也不太难使用--但它看起来像“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")
【讨论】:
以上是关于从宽到长重塑数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)如果没有指定行标识符号,则所有的字段都会放入variable变量中