R 摘录;字;一串

R 摘录;字;一串,r,R,我有一个表,有153行9列。我感兴趣的是第一列中的字符串,我想提取第四个单词并从第四个单词中创建一个新列表,这个列表将是153行,1列 此数据库表第1列的前两行示例: [1] Resistance_Test DevID (Ohms) 428 [2] Diode_Test SUBLo (V) 353 “字”由空格分隔,因此第一行的第四个字是“428”,第二行的第四个字是“353”。如何创建包含所有153行中第四个单词的新列表 我们可以使用sub。我们将模式匹配为一个或多个非空白(\\S+),然后

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

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

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

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

我们可以使用
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\u extract

 library(stringi)
 stri_extract_last_regex(str1, "\\w+")
 #[1] "428" "353"
数据
str1对正则表达式使用
gsub()

x <- c("Resistance_Test DevID (Ohms) 428", "Diode_Test SUBLo (V) 353")
ptn <- "(.*? ){3}"
gsub(ptn, "", x)

[1] "428" "353"
或者,您可以肯定地知道,您只能搜索数字并放弃所有其他内容:

ptn <- "\\D"
gsub(ptn, "", x)

ptn如果您不熟悉正则表达式,函数
strsplit
可以帮助您:

data <- c('Resistance_Test DevID (Ohms) 428', 'Diode_Test SUBLo (V) 353')
unlist(lapply(strsplit(data, ' '), function(x) x[4]))
[1] "428" "353"
data您可以使用
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"
>x库(stringr)
>字(字符串=x,开始=4,结束=4)
[1] "428" "353"
如果指定起始字和结束字的位置相同,则始终会得到第四个字


我希望这能有所帮助。

您不是在提取数字吗?例如,这不就是
gsub(“\\D”,”,x)
?或者
gsub(“.*(\\d+),“\\1”,x)
可能吗?或者如果这始终是最后一部分,也可以是
gsub(.*\\s+(.*),“\\1”,x)
。第四个单词总是数字吗?@davidernburg第四个“单词”通常是数字,但并不总是数字。或者
sub(.*\\w+$”,“\\1”,x)
?谢谢,这就很好了。我想我必须了解更多关于gsub和Regexp的信息,为什么这会被否决?评论可能会有帮助我无法让stringr在R3.2.4版本中工作:((Windows 7 64位,如果有关系的话)@Paige:你能提供更多的细节吗?它会引发任何错误吗?如果是的话,是什么?我在Windows 7(专业版)64位版本中的3.2.4版本中也做了,没有任何问题。只是在Arch Linux(64位)下的3.2.4版本中做的并且没有问题。您可以尝试重新安装
stringi
所依赖的包
stringr
(请注意非常相似的名称,不要混淆-这些是不同的包),然后重试。我只是再次尝试安装和使用stringr。错误是:>loadNamespace中的库(stringr)错误(j好的,没关系,我升级到了适用于Windows的R3.2.5,现在stringr似乎工作正常
data <- c('Resistance_Test DevID (Ohms) 428', 'Diode_Test SUBLo (V) 353')
unlist(lapply(strsplit(data, ' '), function(x) x[4]))
[1] "428" "353"
> x <- c("Resistance_Test DevID (Ohms) 428", "Diode_Test SUBLo (V) 353")
> library(stringr)
> word(string = x, start = 4, end = 4)
[1] "428" "353"