R 如何根据特定要求分隔字符串
我有一个变量a,它包含如下字符:R 如何根据特定要求分隔字符串,r,regex,R,Regex,我有一个变量a,它包含如下字符: DEVICE PRF .75MG 0.5ML DEVICE PRF 1.5MG 0.5MLX4 CAP 12-25MG 30 CAP DR 60MG 100UD 3270-33 (32%) 我想把它们分成三部分(或变量): 第一部分是描述,第二部分是强度,第三部分是体积。 我想我可以使用gregexpr(),但不确定如何实现它。 如有任何建议,我们将不胜感激。谢谢大家! 您可以使用 library(stringr) str_match(x, "(.*)[ ]{
DEVICE PRF .75MG 0.5ML
DEVICE PRF 1.5MG 0.5MLX4
CAP 12-25MG 30
CAP DR 60MG 100UD 3270-33 (32%)
我想把它们分成三部分(或变量):
第一部分是描述,第二部分是强度,第三部分是体积。
我想我可以使用gregexpr(),但不确定如何实现它。
如有任何建议,我们将不胜感激。谢谢大家! 您可以使用
library(stringr)
str_match(x, "(.*)[ ]{1,}(.*(MG|ML))[ ]{1,}(.*)")[, -c(1, 4)]
# [,1] [,2] [,3]
# [1,] "DEVICE PRF" ".75MG" "0.5ML"
# [2,] "DEVICE PRF" "1.5MG" "0.5MLX4"
# [3,] "CAP" "12-25MG" "30"
# [4,] "CAP DR" "60MG" "100UD 3270-33 (32%)"
假设第二/中间部分始终以MG或ML结尾,并且没有空格
模式
(.*)[{1,}(.*(MG | ML))[{1,}(.*))
可以理解为:匹配的第一部分包含任何内容+至少一个空格+匹配的第二部分以MG或ML结尾+至少一个空格+匹配的第三部分包含任何内容。假设中间部分没有空格,并且始终以或数字开头,我们可以在base R中这样做:
a <- c("DEVICE PRF .75MG 0.5ML", "DEVICE PRF 1.5MG 0.5MLX4",
"CAP 12-25MG 30", "CAP DR 60MG 100UD 3270-33 (32%)")
a_as_csv <- sub('([^.0-9]*) ([.0-9][^ ]+) (.*)', '\\1,\\2,\\3', a)
read.csv(textConnection(a_as_csv), col.names = c('x', 'y', 'z'), header = F)
# x y z
# 1 DEVICE PRF .75MG 0.5ML
# 2 DEVICE PRF 1.5MG 0.5MLX4
# 3 CAP 12-25MG 30
# 4 CAP DR 60MG 100UD 3270-33 (32%)
a是空格字符还是制表符?您可能希望为此使用正则表达式,但具体取决于定义不同组的规则。例如,这个正则表达式将分割您提供的数据,但它做出了一些可能不准确的假设。它可能以“ML”而不是“MG”结尾。@LiliaFeng,ok,在更新中考虑到了这一点。
a <- c("DEVICE PRF .75MG 0.5ML", "DEVICE PRF 1.5MG 0.5MLX4",
"CAP 12-25MG 30", "CAP DR 60MG 100UD 3270-33 (32%)")
a_as_csv <- sub('([^.0-9]*) ([.0-9][^ ]+) (.*)', '\\1,\\2,\\3', a)
read.csv(textConnection(a_as_csv), col.names = c('x', 'y', 'z'), header = F)
# x y z
# 1 DEVICE PRF .75MG 0.5ML
# 2 DEVICE PRF 1.5MG 0.5MLX4
# 3 CAP 12-25MG 30
# 4 CAP DR 60MG 100UD 3270-33 (32%)