grep部分rowname并保存在新列中

时间:2016-06-22 07:11:59

标签: r

我的数据框的rownames包含空格分隔的字符串。我想gre一下rowname的最后5部分并将其保存在新专栏中。

hsa-let-7f-5p TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt

要获得第一部分,我这样做:

read.table(text=rownames(df))$V1

我想要的是什么:

TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt

3 个答案:

答案 0 :(得分:3)

我们可以将字符串拆分为strsplit,将最后5个元素与tailpaste放在一起

 paste(tail(strsplit(str1, "\\s+")[[1]],5), collapse=" ")
 #[1] "TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt"

如果我们有多个元素,我们会遍历list(来自strsplit的输出)并执行与上面相同的操作。

 sapply(strsplit(rep(str1,2), " "), function(x) paste(tail(x, 5), collapse=" "))
 #[1] "TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt" "TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt"

或使用str_extract

 library(stringr)
 str_extract(str1, "(\\S+\\s+){4}\\S+$")
 #[1] "TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt"

可以在sub

base R中使用部分相同的模式
sub(".*\\s+((\\S+\\s+){4})(\\S+)$", "\\1\\3", str1)
#[1] "TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt"

数据

str1 <- "hsa-let-7f-5p TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt"

答案 1 :(得分:3)

我们可以使用word中的stringr

library(stringr)
paste(word(x, -5:-1), collapse = ' ')
#[1] "TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt"

答案 2 :(得分:2)

您可以使用此

library(stringr)
library(stringi)
word(V1,stri_count(V1,regex="\\S+")-4,stri_count(V1,regex="\\S+"))

<强> 数据

V1<-"hsa-let-7f-5p TGAGGTAGTAGATTGTATAAA 0 I-AA 0 gtt"