解析字符串中的每个数字,并将其存储在R中的新列中
下面是我在R中拥有的数据帧中的一个示例行,我正在寻找一种方法,将12个数字中的每一个拆分为自己的列解析字符串中的每个数字,并将其存储在R中的新列中,r,split,R,Split,下面是我在R中拥有的数据帧中的一个示例行,我正在寻找一种方法,将12个数字中的每一个拆分为自己的列 Pos. Part.: 16 , 18 , 28 , 37 , 64 , 67 Neg. Part.: 11 , 28 , 34 , 41 , 55 , 72 实现这一点的最佳字符串操作函数是什么?谢谢 如果您只需要这些数字,这应该可以: #data: hoc
Pos. Part.: 16 , 18 , 28 , 37 , 64 , 67 Neg. Part.: 11 , 28 , 34 , 41 , 55 , 72
实现这一点的最佳字符串操作函数是什么?谢谢 如果您只需要这些数字,这应该可以:
#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"
如果您只需要这些数字,这应该可以:
#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"
@Chris的回答巧妙地提取了数字,但我怀疑你的问题在于它合并了Pos和Neg,而你无法将它们分开。如果您总是同时获得Pos和Neg,那么可以使用一个regexpr来获取这两个组。然而,如果你只能得到一个或另一个,那么你就不知道哪一个是通过一个匹配找到的 因此,最稳健的方法是分别搜索Pos和Neg。下面的代码使用了一种称为lookback的
regexpr
技巧。它匹配前面有另一个模式的文本,但另一个模式不包括在匹配中。我们只关注数字(由空格逗号和0-9组成)。因此:
ch@Chris的回答巧妙地提取了数字,但我怀疑你的问题在于它合并了Pos和Neg,而你无法将它们分开。如果您总是同时获得Pos和Neg,那么可以使用一个regexpr来获取这两个组。然而,如果你只能得到一个或另一个,那么你就不知道哪一个是通过一个匹配找到的
因此,最稳健的方法是分别搜索Pos和Neg。下面的代码使用了一种称为lookback的regexpr
技巧。它匹配前面有另一个模式的文本,但另一个模式不包括在匹配中。我们只关注数字(由空格逗号和0-9组成)。因此:
chstr\u extract\u all
适用于我的目的,谢谢。我对像Pos.Part.:
这样的文本部分没有任何用处。可能值得后退一步。所有行的格式都相同吗?有一些读取函数可以处理结构化数据,而无需进行后期处理。数据的来源是什么?文件?鉴于这是一个较大对象中的一行,我建议(正如@David_O所建议的)查看更多上下文可能是有益的。虽然我们可以对您的要求强行给出答案,但这可能不是您所需的最佳答案。@David_O所有行的格式都相同,尽管用逗号分隔的数字数量可能不同。我正在使用rvest
来获取曲棍球箱的得分,这是数据的来源,例如这个:啊。这很难。表中的该列有各种格式的文本,因此您必须根据具体情况处理不同类型的文本。正则表达式将是您在这里的朋友(?regexpr
)-如果您在语法有点棘手之前没有使用过它们,那么它们是非常宝贵的(下面的答案就是@chris使用的)(那“\\d”是一个正则表达式。str\u extract\u all
用于我的目的,谢谢。我不使用像Pos.Part.:
这样的文本部分。可能值得退一步。所有行的格式都相同吗?有读取函数可以处理结构化数据,而无需后期处理。da的来源是什么ta?一个文件?鉴于这是一个较大对象中的一行,我建议它可能是有益的(正如@David_O所建议的)查看更多上下文。虽然我们可以对您要求的内容强行给出答案,但这可能不是您所需的最佳答案。@David_O所有行的格式都相同,尽管用逗号分隔的数字数量可能不同。我正在使用rvest
获取曲棍球盒分数,这是考试数据的来源这是一个例子:啊。这很难。表中的那列有各种格式的文本,因此您必须根据具体情况处理不同的文本。正则表达式将是您的朋友(?regexpr
)-如果您在语法有点棘手之前没有使用过它们,但它们是非常宝贵的(下面的@chris使用的就是这些答案,“\\d”是一个正则表达式。