提取"单词"从一个字符串

时间:2016-04-18 12:28:47

标签: r

我有一个153行乘9列的表。我感兴趣的是第一列中的字符串,我想从第四个单词中提取第四个单词并创建一个新列表,这个列表将是153行,1列。

此数据库表的第1列的前两行示例:

[1] Resistance_Test DevID (Ohms) 428
[2] Diode_Test SUBLo (V) 353

"词"由空格分隔,所以第一行的第四个字是" 428"第二行的第四个字是" 353"。如何创建包含所有153行的第四个单词的新列表?

4 个答案:

答案 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"