解析字符串中的每个数字并将其存储在R中的新列中

下面是当前在R中具有的数据帧中的示例行,我正在寻找一种在其自己的列中拆分出12个数字中的每个数字的方法。

    Pos. Part.: 16,18,28,37,64,67     Neg. Part.: 11,34,41,55,72

完成此操作的最佳字符串操作函数是什么?谢谢!

cat2799 回答:解析字符串中的每个数字并将其存储在R中的新列中

如果您只想输入数字,这应该可以:

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
本文链接:https://www.f2er.com/2953736.html

大家都在问