如何解决提取括号 R 前的所有字符 数据
我想有一个简单的正则表达式解决方案 - 我想提取名称列中第一个左“(”括号之前出现的所有内容。
我当前的代码返回这个:
df$New_Name <- strsplit(df$Name,'[()]')[[1]][[1]]
Name New_Name
1abc (55x50) 1abc
1abc (50x40) 1abc
2def (20x15) 1abc
2def (25x12) 1abc
3ghi (30x5) 1abc
3ghi (30x10) 1abc
我正在运行的代码仅适用于第一个实例。对于 2def、3ghi 等,它没有返回正确的字符串。
期望的输出:
Name New_Name
1abc (55x50) 1abc
1abc (50x40) 1abc
2def (20x15) 2def
2def (25x12) 2def
3ghi (30x5) 3ghi
3ghi (30x10) 3ghi
解决方法
strsplit
返回一个 list
。通过提取第一个元素 [[1]]
,它只返回第一个 list
元素的内容。然后,无论提取什么值,即第一个列表元素 [[1]][[1]]
的第一个元素,它都只是一个值,并且通过赋值,它会被回收
df$New_Name <- sapply(strsplit(df$Name,'\\s*[()]'),`[`,1)
在上面的代码中,不是提取第一个元素,而是用list
循环sapply
,然后提取第一个元素
另一个选项是 trimws
,将 whitespace
中的正则表达式指定为零个或多个空格 (\\s*
),后跟 (
和其他字符 (.*
)
df$New_Name <- trimws(df$Name,whitespace = "\\s*\\(.*")
或者可以使用 sub
df$New_Name <- sub("\\s*\\(.*","",df$Name)
-输出
df
Name New_Name
1 1abc (55x50) 1abc
2 1abc (50x40) 1abc
3 2def (20x15) 2def
4 2def (25x12) 2def
5 3ghi (30x5) 3ghi
6 3ghi (30x10) 3ghi
数据
df <- structure(list(Name = c("1abc (55x50)","1abc (50x40)","2def (20x15)","2def (25x12)","3ghi (30x5)","3ghi (30x10)")),row.names = c(NA,-6L),class = "data.frame")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。