r - 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
列中。
解决方案
": 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
推荐阅读
- c# - Azure B2C 身份验证(角度 + .net 核心 Web API) - 在不记名令牌中找不到范围或角色声明
- python - 如何递归检查列表的每个元素?
- r - 最大似然估计 -MLE- 在 R 中使用 plm 包
- android - 如何使用 YouTube 直播 API-Android 从我的应用在 YouTube 上直播
- javascript - Chartjs - 图例在移动设备上占用太多空间
- pandas - 按列号列表过滤熊猫数据框
- node.js - 在 Mongo nodejs 中使用 await 调用构造函数和使用 new 调用构造函数有什么区别?
- javascript - 我需要编辑哪个属性来更改以下颜色?
- spring-boot - 将自定义日志从 CodeStar 应用程序发送到 CloudWatch
- apache - apache意外关闭,我无论如何都无法修复它?