我在使用 reshape 转换经典输入数据时遇到问题
我的输入数据:
df <- read.table(textConnection(" Ville POP1999 POP2010 PARC1999 PARC2010
1 Paris 1800000 2200000 150 253
2 Itxassou 1000 1800 0 NA
"))
此 data.frame 中的结果:
Ville POP1999 POP2010 PARC1999 PARC2010
1 Paris 1800000 2200000 150 253
2 Itxassou 1000 1800 0 NA
我有这种类型的输入,我想使用 colsplit (reshape2 包)和正则表达式来剪切我的数据框,如下所示:
Ville Date Population Parc
1 Paris 1999 1800000 150
2 Paris 2010 2200000 253
3 Itxassou 1999 1000 0
4 Itxassou 2010 1800 NA
您认为可以使用 reshape 1 或 2 和 colsplit 函数在一行中完成此操作吗?
我的 id 等于“Ville”+“Date”,所以我认为首先使用 colsplit 进行剪切很困难,然后再使用 meld 重新使用结果 id 列:/
你有答案吗?
更新 1:
我给这个问题增加了一些难度,想象一下现在我们有数千个列,并且列是混合的。我尝试使用 grep 和 reshape,但此时没有结果..(请参阅 @kohske 伟大答案的评论)
更新2:
@kohske 通过添加此代码解决问题:
cn <- grep("*[0-9]",names(df),value="TRUE")
reshape(df, varying = cn, direction = "long", sep = "")
最佳答案
您可以使用stats::reshape
:
> reshape(df, 2:5, direction = "long", sep = "")
Ville time POP PARC id
1.1999 Paris 1999 1800000 150 1
2.1999 Itxassou 1999 1000 0 2
1.2010 Paris 2010 2200000 253 1
2.2010 Itxassou 2010 1800 NA 2
关于regex - 通过融合和 reshape 包重新使用 colsplit 正则表达式切割列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588234/