2016-08-17 123 views
0

我想从列中读取数据,然后将我想要的信息连接成一个字符串。r-concatenate列表中的n个元素

到目前为止,我写了R脚本成功的单个字符串输入,但我不能为它做n元素。

reprows <- strsplit("Day1_XExp2B3_500x_Y_Z", "_", fixed = T) 
lenreprows <- length(reprows[[1]]) 
temprepnamelisttopaste <- c(2:(lenreprows-2)) 
temprepname <- paste(sapply(reprows[temprepnamelisttopaste]),collapse='.') 

数据看起来像每一行:

Day1_XExp2B3_500x_Y_Z 

我的输出应该是:

XExp2B3.500x 

回答

2

如何

## a function for re-concatenation 
rc <- function (u) paste0(u[2:(length(u)-2L)], collapse = ".") 
## main code 
unlist(lapply(strsplit(x, "_", fixed = T), rc)) 

其中x是你的性格列有许多元素。我做了一个简单的测试与

x <- rep("Day1_XExp2B3_500x_Y_Z", 2) 

和代码给

#[1] "XExp2B3.500x" "XExp2B3.500x" 

看起来做工精细。

1

strsplit当你传递一个向量时产生一个列表,所以你需要一个*apply函数来操纵每个结果。正则表达式可能是一个更直接的选择,这取决于你对字符串的了解:

x <- c("Day1_XExp2B3_500x_Y_Z", "Day1_XExp2B3_500x_Y_Z") 

sub("\\w+_(\\w+)_(\\w+)_._.", "\\1.\\2", x) 
## [1] "XExp2B3.500x" "XExp2B3.500x"