我有一个153行乘9列的表。我感兴趣的是第一列中的字符串,我想从第四个单词中提取第四个单词并创建一个新列表,这个列表将是153行,1列。
此数据库表的第1列的前两行示例:
[1] Resistance_Test DevID (Ohms) 428
[2] Diode_Test SUBLo (V) 353
"词"由空格分隔,所以第一行的第四个字是" 428"第二行的第四个字是" 353"。如何创建包含所有153行的第四个单词的新列表?
答案 0 :(得分:2)
将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)
答案 1 :(得分:2)
您可以使用-D
包中的word()
:
stringr
指定开始和结束单词的位置相同,您将始终获得第四个单词。
我希望这会有所帮助。
答案 2 :(得分:1)
我们可以使用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")
答案 3 :(得分:1)
如果您不熟悉正则表达式,函数strsplit
可以帮助您:
data <- c('Resistance_Test DevID (Ohms) 428', 'Diode_Test SUBLo (V) 353')
unlist(lapply(strsplit(data, ' '), function(x) x[4]))
[1] "428" "353"