我的数据框的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
答案 0 :(得分:3)
我们可以将字符串拆分为strsplit
,将最后5个元素与tail
和paste
放在一起
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"