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

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

将我data.frame从宽表转换为长表时遇到一些麻烦。目前它看起来像这样:


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

现在我想把它data.frame变成一个长期的data.frame。像这样的东西:


Code Country        Year    Value

AFG  Afghanistan    1950    20,249

AFG  Afghanistan    1951    21,352

AFG  Afghanistan    1952    22,532

AFG  Afghanistan    1953    23,557

AFG  Afghanistan    1954    24,555

ALB  Albania        1950    8,097

ALB  Albania        1951    8,986

ALB  Albania        1952    10,058

ALB  Albania        1953    11,123

ALB  Albania        1954    12,246

我已经看过并且已经尝试过使用melt()和reshape()一些人在类似问题中建议的功能。但是,到目前为止我只得到凌乱的结果。


如果有可能我想用这个reshape()功能来做,因为它看起来有点好处理。


炎炎设计
浏览 893回答 3
3回答

心有法竹

使用重塑包:#datax <- read.table(textConnection("Code Country&nbsp; &nbsp; &nbsp; &nbsp; 1950&nbsp; &nbsp; 1951&nbsp; &nbsp; 1952&nbsp; &nbsp; 1953&nbsp; &nbsp; 1954AFG&nbsp; Afghanistan&nbsp; &nbsp; 20,249&nbsp; 21,352&nbsp; 22,532&nbsp; 23,557&nbsp; 24,555ALB&nbsp; Albania&nbsp; &nbsp; &nbsp; &nbsp; 8,097&nbsp; &nbsp;8,986&nbsp; &nbsp;10,058&nbsp; 11,123&nbsp; 12,246"), header=TRUE)library(reshape)x2 <- melt(x, id = c("Code", "Country"), variable_name = "Year")x2[,"Year"] <- as.numeric(gsub("X", "" , x2[,"Year"]))

ITMISS

reshape()需要一段时间才能习惯,就像melt/ cast。假设您的数据框被调用,这是一个重塑的解决方案d:reshape(d, direction = "long", varying = list(names(d)[3:7]), v.names = "Value",&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; idvar = c("Code","Country"), timevar = "Year", times = 1950:1954)
打开App,查看更多内容
随时随地看视频慕课网APP