首页 > 解决方案 > R根据两个正则表达式将字符串拆分为两列

问题描述

我有一些结构如下的数据:

ID   Region            Value
1    Europe            8
2    Europe: Class 1   6
3    Asia: System 2    6
4    North America     7
5    Europe: System 1  5
6    Africa            7
7    Africa: Class 2   5
8    South America     9
9    Europe: System 1  3
10   Europe            7

我想要做的是创建一个名为的新列Class,该列添加列中提到“类”和“系统”的实例Region- 如果不清楚我的意思,请查看下面的预期输出。我知道这可以通过separate函数来​​完成,但我认为您只能为代码的分隔符部分指定一个值。例如sep = ": Class",只会拆分提及“类”的实例,但我也想拆分任何提及“系统”的实例。这可以在一行代码中完成,还是我需要在这里做一些更复杂的事情?这是我的最终数据的外观:

ID   Region            Class  Value
1    Europe                   8
2    Europe            1      6
3    Asia              2      6
4    North America            7
5    Europe            1      5
6    Africa                   7
7    Africa            2      5
8    South America            9
9    Europe            1      3
10   Europe                   7

请注意,我想从列中删除对“类”或“系统”(包括冒号)的任何引用Region,并将数值添加到新Class列中。

标签: rregexsplit

解决方案


": System"您可以通过使用带有或": Class"作为符号的正则表达式的 strsplit 来使用基本函数:

splitted = strsplit(df$Region,"(: Class)|(: System)")
df$Region = lapply(splitted,FUN=function(x){x[1]})
df$Class = lapply(splitted,FUN=function(x){x[2]})

结果是:

> df
   ID        Region Value Class
1   1        Europe     8    NA
2   2        Europe     6     1
3   3          Asia     6     2
4   4 North America     7    NA
5   5        Europe     5     1
6   6        Africa     7    NA
7   7        Africa     5     2
8   8 South America     9    NA
9   9        Europe     3     1
10 10        Europe     7    NA

推荐阅读