我正在尝试合并三个组合列:
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文件中读取此数据。有人可以帮我怎么做?
答案 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