首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从向量R中提取带有十进制的数字

从向量R中提取带有十进制的数字
EN

Stack Overflow用户
提问于 2022-11-03 15:40:57
回答 3查看 38关注 0票数 2

我有以下向量:

代码语言:javascript
复制
c("c(`Kruskal-Wallis chi-squared` = 201.760850624131)", "c(df = 17)", 
"1.26686891197831e-33", "Kruskal-Wallis rank sum test", "delta_Z by criteria"
)

我想要这个输出:

代码语言:javascript
复制
c("201.760850624131", "17", "1.26686891197831e-33")

谢谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-11-03 15:42:08

我们可以将str_extract与匹配一个或多个数字([0-9]+)的正则表达式([0-9]+)与一个或多个数字(然后是一个或多个数字)匹配,e与-+以及任何数字相匹配。

代码语言:javascript
复制
library(stringr)
as.numeric(na.omit(str_extract(v1, "[0-9]+(\\.[0-9]+e[-+]\\d+)?")))

-output

代码语言:javascript
复制
[1] 2.010000e+02 1.700000e+01 1.266869e-33

数据

代码语言:javascript
复制
v1 <- c("c(`Kruskal-Wallis chi-squared` = 201.760850624131)", "c(df = 17)", 
"1.26686891197831e-33", "Kruskal-Wallis rank sum test", "delta_Z by criteria"
)
票数 2
EN

Stack Overflow用户

发布于 2022-11-03 15:46:12

我们可以尝试在这里使用str_extract作为regex选项:

代码语言:javascript
复制
x <- c("c(`Kruskal-Wallis chi-squared` = 201.760850624131)",
       "c(df = 17)", 
       "1.26686891197831e-33",
       "Kruskal-Wallis rank sum test",
       "delta_Z by criteria"
)
output <- as.numeric(na.omit(str_extract(x, "\\d+(?:\\.\\d+)?(?:e[+-]\\d+)?")))
output

[1] 2.017609e+02 1.700000e+01 1.266869e-33

对regex的解释:

  • \\d+匹配整数component
  • (?:\\.\\d+)?可选的十进制component
  • (?:e[+-]\\d+)?可选指数(正或负)
票数 3
EN

Stack Overflow用户

发布于 2022-11-03 15:56:14

因为它似乎是R码:

代码语言:javascript
复制
x <- c("c(`Kruskal-Wallis chi-squared` = 201.760850624131)", "c(df = 17)", 
"1.26686891197831e-33", "Kruskal-Wallis rank sum test", "delta_Z by criteria")

as.character(sapply(sapply(x[1:3], str2lang, USE.NAMES = F), eval))

#> [1] "201.760850624131"     "17"                   "1.26686891197831e-33"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74305774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档