使用sub
函数:
ips <- c('140.112.204.42', '132.212.14.139', '31.2.47.93', '7.112.221.238')
sub('\\.\\d+\\.\\d+$', '', ips)
# [1] "140.112" "132.212" "31.2" "7.112"
使用来自`stringr`的`str_extract`函数:
library(stringr)
str_extract(ips, '^\\d+\\.\\d+')
使用
strsplit
+
sapply
方法:
sapply(strsplit(ips, '\\.'), function(x) paste(x[1:2], collapse = '.'))
使用read.table
+ apply
:
apply(read.table(textConnection(ips), sep='.')[1:2], 1, paste, collapse = '.')
注意:
sub('\\.\\d+\\.\\d+$', '', ips)
:
i. \\.\\d+\\.\\d+$
匹配字符串末尾的字面点、一个或多个数字,再跟一个字面点和一个或多个数字
ii. sub
从字符串中删除上述匹配项
str_extract(ips, '^\\d+\\.\\d+')
:
i. ^\\d+\\.\\d+
匹配字符串开头的一个或多个数字,一个字面点和一个或多个数字
ii. str_extract
从字符串中提取上述匹配项
sapply(strsplit(ips, '\\.'), function(x) paste(x[1:2], collapse = '.'))
:
i. strsplit(ips, '\\.')
使用字面点作为分隔符拆分每个IP,返回拆分后的向量列表
ii. 使用sapply
对列表中的每个元素应用 paste(x[1:2], collapse = '.')
,因此只取每个向量中的前两个数字,并使用点号将它们合并。然后使用sapply
将列表强制转换为向量,从而返回所需的IP向量。
apply(read.table(textConnection(ips), sep='.')[1:2], 1, paste, collapse = '.')
:
i. read.table(textConnection(ips), sep='.')[1:2]
将ips
作为文本输入,并将点号作为分隔符读入。只取前两列。
ii. apply
启用对每行进行操作的paste
,并使用点号合并结果。
read.table
函数,您无需使用apply
函数,可以使用do.call(paste,c(sep='.',read.table(textConnection(ips), sep='.')[1:2]))
。 - Onyambu