假设有一个如下的字符向量:
应用上述函数:
如果分割后的部分长度不同,这种方法就行不通了。
file1_p1_analysed_samples.txt
file1_p1_raw_samples.txt
f2_file2_p1_analysed_samples.txt
f3_file3_p1_raw_samples.txt
期望的输出:
file1_p1_analysed
file1_p1_raw
file2_p1_analysed
file3_p1_raw
我希望能够比较元素并尽可能地从开头和结尾删除字符串的部分,但保持它们的独特性。
上面只是一个例子。要删除的部分对所有元素来说并不常见。我需要一种通用的解决方案,与上面示例中的字符串无关。
到目前为止,我已经能够除去所有元素都共有的部分,前提是分隔符和分割后的部分长度相同。以下是函数:
mf <- function(x,sep){
xsplit = strsplit(x,split = sep)
xdfm <- as.data.frame(do.call(rbind,xsplit))
res <- list()
for (i in 1:ncol(xdfm)){
if (!all(xdfm[,i] == xdfm[1,i])){
res[[length(res)+1]] <- as.character(xdfm[,i])
}
}
res <- as.data.frame(do.call(rbind,res))
res <- apply(res,2,function(x) paste(x,collapse="_"))
return(res)
}
应用上述函数:
a = c("a_samples.txt","b_samples.txt")
mf(a,"_")
V1 V2
"a" "b"
2.
> b = c("apple.fruit.txt","orange.fruit.txt")
> mf(b,sep = "\\.")
V1 V2
"apple" "orange"
如果分割后的部分长度不同,这种方法就行不通了。
gsub("_samples.txt", "", [your vector])
。 - ulfelderf2
和f3
?它们不一样。 - pogibas