regex - 通过融合和 reshape 包重新使用 colsplit 正则表达式切割列

标签 regex r dataframe reshape factors

我在使用 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/

相关文章:

r - 根据 dplyr 中的正则表达式匹配从长到宽的突变

r - 使用条件循环遍历 data.table 行

r - 叠加不同物种积累图

r - R中的Apriori算法,不是否定规则

python - Pandas 分组并用新列中的中位数进行纠正

python - Pandas :加入有条件的数据框

regex - 如何使用Perl从文本文件中提取IP地址?

javascript - 如何拆分(不是值)后跟(值)?

asp.net - 这个正则表达式是什么意思 : (? ![#$])

javascript - 正则表达式模式中的可选子字符串