regex - 在由 "."分隔的字符上通过正则表达式拆分数据框列

标签 regex r plyr

在 R 中,我有以下数据框:

     Name     Category
1    Beans    1.12.5
2    Pears    5.7.9
3    Eggs     10.6.5

我想要的是以下内容:

     Name     Cat1    Cat2    Cat3
1    Beans    1       12      5
2    Pears    5       7       9
3    Eggs     10      6       5

理想情况下,在 plyr 内部构建一些表达式会很好......

我会在我这边进行调查,但由于搜索这可能会花费我很多时间,我只是想知道你们中的一些人是否有一些提示来执行此操作...

最佳答案

我编写了一个函数 concat.split(实际上是函数“家族”)作为我的 splitstackshape 包的一部分来处理这些类型的问题:

# install.packages("splitstackshape")
library(splitstackshape)
concat.split(mydf, "Category", ".", drop=TRUE)
#    Name Category_1 Category_2 Category_3
# 1 Beans          1         12          5
# 2 Pears          5          7          9
# 3  Eggs         10          6          5

它也适用于“不平衡”数据。

dat <- data.frame(Name = c("Beans", "Pears", "Eggs"), 
                  Category = c("1.12.5", "5.7.9.8", "10.6.5.7.7"))
concat.split(dat, "Category", ".", drop = TRUE)
#    Name Category_1 Category_2 Category_3 Category_4 Category_5
# 1 Beans          1         12          5         NA         NA
# 2 Pears          5          7          9          8         NA
# 3  Eggs         10          6          5          7          7

因为在这些类型的情况下通常需要“长”或“熔化”数据,concat.split.multiple 函数也有一个“长”参数:

concat.split.multiple(dat, "Category", ".", direction = "long")
#     Name time Category
# 1  Beans    1        1
# 2  Pears    1        5
# 3   Eggs    1       10
# 4  Beans    2       12
# 5  Pears    2        7
# 6   Eggs    2        6
# 7  Beans    3        5
# 8  Pears    3        9
# 9   Eggs    3        5
# 10 Beans    4       NA
# 11 Pears    4        8
# 12  Eggs    4        7
# 13 Beans    5       NA
# 14 Pears    5       NA
# 15  Eggs    5        7

关于regex - 在由 "."分隔的字符上通过正则表达式拆分数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18525097/

相关文章:

r - 使用 dplyr 跨列进行条件求和

python - R-Python : how to eliminate specific rows and columns?

r - R 中的条件交叉表

regex - (^?)* 在这个正则表达式中是什么意思?

regex - Bash——重命名文件

java - 无法在 docker 镜像中安装 RWeka 包

r - 在这种情况下如何使用连接?

r - ddply - 对象中包含的变量名称中的空格

regex - 替换 START 和 END 字符串之间的文本,不包括 perl 中的 END 字符串

java - 如何在黑莓 ({m,n}) 上使用量词正则表达式模式