下面是当前在R中具有的数据帧中的示例行,我正在寻找一种在其自己的列中拆分出12个数字中的每个数字的方法。
Pos. Part.: 16,18,28,37,64,67 Neg. Part.: 11,34,41,55,72
完成此操作的最佳字符串操作函数是什么?谢谢!
下面是当前在R中具有的数据帧中的示例行,我正在寻找一种在其自己的列中拆分出12个数字中的每个数字的方法。
Pos. Part.: 16,18,28,37,64,67 Neg. Part.: 11,34,41,55,72
完成此操作的最佳字符串操作函数是什么?谢谢!
如果您只想输入数字,这应该可以:
error
如果数字可以包含的数字字符数量有所不同,请这样修改#data:
hockey <- c("Pos. Part.: 16,18,28,37,64,67 Neg. Part.: 11")
# define pattern to be matched:
pattern <- "\\d{2}"
# define function to extract raw matches:
extract <- function(x) unlist(regmatches(x,gregexpr(pattern,x,perl = T)))
# extract raw matches:
extract(hockey)
extract
[1] "16" "18" "28" "37" "64" "67" "11"
:
pattern
,
@Chris的答案整齐地提取了数字,但是我怀疑您的问题是它将Pos和Neg合并在一起,然后就无法将它们分开。如果您总是同时获得Pos和Neg,则可以使用捕获这两个组的正则表达式。但是,如果您只能获得一个或另一个,那么您将不知道一次匹配就找到了哪个。
因此,最可靠的方法是分别搜索Pos和Neg。下面的代码使用了一个{@ 1}}技巧,称为后向。它匹配以另一种模式开头的文本,但是该另一种模式不包含在匹配项中。我们紧随数字之后(用逗号和0-9混合空格)。因此给出:
regexpr
我们可以使用它来获取ch <- 'Pos. Part.: 16,67 Neg. Part.: 11,34,41,55,72'
和16,67
,然后获取数字。
11,72
现在,我们可以提取那些匹配项并返回数字。
pos <- regexpr('(?<=Pos. Part.:)[,0-9]+',ch,perl=TRUE)
neg <- regexpr('(?<=Neg. Part.:)[,perl=TRUE)
我们现在可以使用@Chris的模式来提取数字,但是也可以只使用pos <- regmatches(pos,ch)
neg <- regmatches(neg,ch)
pos <- strsplit
。以strsplit
为例:
pos