如何将单个表中的3列堆叠到R中的一列

时间:2014-12-10 06:04:27

标签: r

我正在尝试合并三个组合列:

Population Estimate 2010    Population Estimate 2011    Population Estimate 2012
1,513,228                                 1,526,294     1,539,357
1,163                                      1,119         1,106
37,862                                    37,313          36,471
219,973                                   220,469        221,056
45,457                                    45,137         45,683
21,483                                    21,499         21,472

这些是一个表的一部分,我想将2010年和2011年的数据组合成一列。正在从我下载的csv文件中读取此数据。有人可以帮我怎么做?

2 个答案:

答案 0 :(得分:1)

除了组合列之外,您的数据还有两个问题需要处理。

首先,你的号码中有逗号。 R会将这些解释为字符并将其导入为因子。所以我们必须摆脱逗号并将结果转换回整数。然后我们可以“融化”,例如将您的数据框从宽格式重塑为长格式。

# get rid of commas in numbers
df <- data.frame(sapply(df,gsub,pattern=",",replacement="",fixed=T))
# convert character to integer
df <- data.frame(sapply(df,function(x)as.integer(as.character(x))))
# rename columns with just the year
colnames(df) <- gsub("^.+\\.","",colnames(df))
library(reshape2)
# convert to long format
result <- melt(df,measure.vars=1:3, variable.name="year", value.name="population")
head(result)
#   year population
# 1 2010    1513228
# 2 2010       1163
# 3 2010      37862
# 4 2010     219973
# 5 2010      45457
# 6 2010      21483

答案 1 :(得分:0)

不是很清楚你需要什么,但这有帮助吗?

myDF = data.frame("2010"=c(1,2,3,4,5),"2011"=c(6,7,8,9,10),"2012"=c(11,12,13,14,15))
reshape(myDF,direction = "long",varying = list(names(myDF)),timevar = "Year", times = 2010:2012,v.names = "PopEst")

输出如下:

> myDF
  X2010 X2011 X2012
1     1     6    11
2     2     7    12
3     3     8    13
4     4     9    14
5     5    10    15
> reshape(myDF,direction = "long",varying = list(names(myDF)),timevar = "Year", times = 2010:2012,v.names = "PopEst")
       Year PopEst id
1.2010 2010      1  1
2.2010 2010      2  2
3.2010 2010      3  3
4.2010 2010      4  4
5.2010 2010      5  5
1.2011 2011      6  1
2.2011 2011      7  2
3.2011 2011      8  3
4.2011 2011      9  4
5.2011 2011     10  5
1.2012 2012     11  1
2.2012 2012     12  2
3.2012 2012     13  3
4.2012 2012     14  4
5.2012 2012     15  5