[英]Extract “words” from a string
我有一个153行乘9列的表。 我感兴趣的是第一列中的字符串,我想从第四个单词中提取第四个单词并创建一个新列表,这个列表将是153行,1列。
此数据库表的第1列的前两行示例:
[1] Resistance_Test DevID (Ohms) 428
[2] Diode_Test SUBLo (V) 353
“单词”由空格分隔,因此第一行的第四个单词是“428”,第二行的第四个单词是“353”。 如何创建包含所有153行的第四个单词的新列表?
将gsub()
与正则表达式一起使用
x <- c("Resistance_Test DevID (Ohms) 428", "Diode_Test SUBLo (V) 353")
ptn <- "(.*? ){3}"
gsub(ptn, "", x)
[1] "428" "353"
这是有效的,因为正则表达式(.*? ){3}
恰好找到三个{3}
字符集后跟一个空格(.*? )
,然后用空字符串替换它。
有关更多信息,请参阅?gsub
和?regexp
。
如果您的数据具有您在问题中未提及的结构,那么正则表达式可能会变得更加容易。
例如,如果您始终对每行的最后一个字感兴趣:
ptn <- "(.*? )"
gsub(ptn, "", x)
或许你肯定知道你只能搜索数字并丢弃其他所有内容:
ptn <- "\\D"
gsub(ptn, "", x)
你可以使用stringr
包中的word()
:
> x <- c("Resistance_Test DevID (Ohms) 428", "Diode_Test SUBLo (V) 353")
> library(stringr)
> word(string = x, start = 4, end = 4)
[1] "428" "353"
指定开始和结束单词的位置相同,您将始终获得第四个单词。
我希望这有帮助。
我们可以使用sub
。 我们将模式匹配一个或多个非空白空间( \\\\S+
),然后是一个或多个空格( \\\\s+
),重复3次( {3}
),然后是在一个组中捕获的单词( (\\\\w+)
)后跟一个或多个字符。 我们用第二个反向引用替换它。
sub("(\\S+\\s+){3}(\\w+).*", "\\2", str1)
#[1] "428" "353"
这由第n个字选择,所以
sub("(\\S+\\s+){3}(\\w+).*", "\\2", str2)
#[1] "428" "353" "428"
另一个选项是stri_extract
library(stringi)
stri_extract_last_regex(str1, "\\w+")
#[1] "428" "353"
str1 <- c("Resistance_Test DevID (Ohms) 428", "Diode_Test SUBLo (V) 353")
str2 <- c(str1, "Resistance_Test DevID (Ohms) 428 something else")
如果您不熟悉正则表达式, strsplit
函数可以帮助您:
data <- c('Resistance_Test DevID (Ohms) 428', 'Diode_Test SUBLo (V) 353')
unlist(lapply(strsplit(data, ' '), function(x) x[4]))
[1] "428" "353"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.