r - 使用 gsub() 从 R 中的数组中提取数字

我想从下面的数组中删除 &. 并只提取数字,

x = as.factor(c(".&.", "0.0119885482338&.&.", ".&2.25880593895", ".&.&.&.&.&.&.&.", ".&0.295142083575&.", "0.708323350364",".&.&0.193766679861",".&.&.&.&7.65239874523E-4&.&."))

我尝试了以下 gsub() 命令:

gsub("[^0-9.E-]","",x)

输出:

".."                     "0.0119885482338.."      ".2.25880593895"         
"........"              
".0.295142083575."       "0.708323350364"         "..0.193766679861"       
"....7.65239874523E-4.." 

更新上述 gsub 命令的任何建议,以便输出如下所示:

"" "0.0119885482338" "2.25880593895" "" "0.295142083575" 
"0.708323350364" "0.193766679861" "7.65239874523E-4"  

最佳答案

你可以使用

> sub("^.*?(?:([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?).*|$)","\\1",x)
[1] ""                 "0.0119885482338"  "2.25880593895"    ""                 "0.295142083575"   "0.708323350364"   "0.193766679861"   "7.65239874523E-4"

参见 regex demo .

详细信息:

  • ^ - 字符串的开始
  • .*? - 任何文本,尽可能短
  • (?: - 非捕获组的开始:
    • ([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?) - 第 1 组(\1): number pattern
    • .* - 字符串的其余部分
  • |
    • $ - 字符串结尾
  • ) - 非捕获组结束。

查看 online R demo :

x=as.factor(c(".&.", "0.0119885482338&.&.", ".&2.25880593895", ".&.&.&.&.&.&.&.", ".&0.295142083575&.", "0.708323350364",".&.&0.193766679861",".&.&.&.&7.65239874523E-4&.&."))
sub("^.*?(?:([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?).*|$)","\\1",x)
## => [1] ""                 "0.0119885482338"  "2.25880593895"    ""                
##    [5] "0.295142083575"   "0.708323350364"   "0.193766679861"   "7.65239874523E-4"

https://stackoverflow.com/questions/67456482/

相关文章:

javascript - 类型错误:无法在 React 项目中读取 null 的属性 'length

awk - Unix 提取两行之间的行并将它们存储在各自的文件中

javascript - 使 href 中带有哈希 (#) 的每个 anchor 标记都不可点击

kotlin - 如何获取数组 Kotlin 中特定值的大小

r - 从数据框中的前一列中减去每一列

git - 如何在 git pull 之前预览更改

loops - 为什么内循环收集不返回结果?

r - 使向量的所有元素都不同

awk - 从使用 sed 获得的部分中获取上面的 N 行

python - Tensorflow Metal 插件已注册错误