gpt4 book ai didi

r - 改进 R 代码,使用正则表达式获取数字

转载 作者:行者123 更新时间:2023-12-04 11:50:36 25 4
gpt4 key购买 nike

我想绘制到特定服务器的 ping 时间,因此我正在解析此字符串的输出:

[1] "PING google.de (216.58.213.195): 56 data bytes"                
[2] "64 bytes from 216.58.213.195: icmp_seq=0 ttl=58 time=15.583 ms"
[3] "64 bytes from 216.58.213.195: icmp_seq=1 ttl=58 time=11.057 ms"
[4] "64 bytes from 216.58.213.195: icmp_seq=2 ttl=58 time=10.866 ms"
[5] ""
[6] "--- google.de ping statistics ---"
[7] "3 packets transmitted, 3 packets received, 0.0% packet loss"
[8] "round-trip min/avg/max/stddev = 10.866/12.502/15.583/2.180 ms"

我正在使用正则表达式并搜索 'time=' 和 'ms' 来获取时间信息开始和结束的位置。然后我使用 Substr 来提取数字。实际上它有效,但这是我第一次尝试在 R 中解析字符串,我的感觉是我的解决方案可以更优雅。你可以帮帮我吗?

X <- system("ping -c 3 google.de",intern=TRUE)
start<-regexpr("time=",X)
end<-regexpr(" ms",X)
start<-start+5
end<-end-1

erg<-substr(X,start,end)
erg<-erg[2:4]
erg

erg<-as.numeric(erg)

hist(erg)

最佳答案

我们可以使用 str_extract提取数字

library(stringr)
na.omit(as.numeric(str_extract(X, '(?<=time=)[0-9.]+(?=\\s*ms)')))
#[1] 15.583 11.057 10.866

数据
X <- c("PING google.de (216.58.213.195): 56 data bytes", 
"64 bytes from 216.58.213.195: icmp_seq=0 ttl=58 time=15.583 ms",
"64 bytes from 216.58.213.195: icmp_seq=1 ttl=58 time=11.057 ms",
"64 bytes from 216.58.213.195: icmp_seq=2 ttl=58 time=10.866 ms",
"", "--- google.de ping statistics ---",
"3 packets transmitted, 3 packets received, 0.0% packet loss",
"round-trip min/avg/max/stddev = 10.866/12.502/15.583/2.180 ms")

关于r - 改进 R 代码,使用正则表达式获取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33506200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com