为了账号安全,请及时绑定邮箱和手机立即绑定

将数据框架从宽格式转换为长格式

将数据框架从宽格式转换为长格式

炎炎设计 2019-05-23 13:14:37
将数据框架从宽格式转换为长格式将我data.frame从宽表转换为长表时遇到一些麻烦。目前它看起来像这样:Code Country        1950    1951    1952    1953    1954AFG  Afghanistan    20,249  21,352  22,532  23,557  24,555ALB  Albania        8,097   8,986   10,058  11,123  12,246现在我想把它data.frame变成一个长期的data.frame。像这样的东西:Code Country        Year    ValueAFG  Afghanistan    1950    20,249AFG  Afghanistan    1951    21,352AFG  Afghanistan    1952    22,532AFG  Afghanistan    1953    23,557AFG  Afghanistan    1954    24,555ALB  Albania        1950    8,097ALB  Albania        1951    8,986ALB  Albania        1952    10,058ALB  Albania        1953    11,123ALB  Albania        1954    12,246我已经看过并且已经尝试过使用melt()和reshape()一些人在类似问题中建议的功能。但是,到目前为止我只得到凌乱的结果。如果有可能我想用这个reshape()功能来做,因为它看起来有点好处理。
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

使用重塑包:


#data

x <- read.table(textConnection(

"Code Country        1950    1951    1952    1953    1954

AFG  Afghanistan    20,249  21,352  22,532  23,557  24,555

ALB  Albania        8,097   8,986   10,058  11,123  12,246"), header=TRUE)


library(reshape)


x2 <- melt(x, id = c("Code", "Country"), variable_name = "Year")

x2[,"Year"] <- as.numeric(gsub("X", "" , x2[,"Year"]))


查看完整回答
反对 回复 2019-05-23
?
ITMISS

TA贡献1871条经验 获得超8个赞

reshape()需要一段时间才能习惯,就像melt/ cast。假设您的数据框被调用,这是一个重塑的解决方案d:


reshape(d, direction = "long", varying = list(names(d)[3:7]), v.names = "Value", 

        idvar = c("Code","Country"), timevar = "Year", times = 1950:1954)


查看完整回答
反对 回复 2019-05-23
  • 3 回答
  • 0 关注
  • 936 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信