从strsplit生成的列表列表中提取并粘贴多个元素

时间:2015-09-15 19:49:24

标签: r string list sapply stringr

我正在尝试提取并粘贴使用strsplit生成的列表列表的元素。 例如:

cat<-c("X0831_d8_f1_2s_wt_8_ROI_009", "X0831_d8_f1_2s_wt_8_ROI_008", 
"X0831_d8_f1_2s_wt_8_ROI_007", "X0831_d8_f1_2s_wt_8_ROI_006", 
"X0831_d8_f1_2s_wt_8_ROI_005", "X0831_d8_f1_2s_wt_8_ROI_004", 
"X0831_d8_f1_2s_wt_8_ROI_003", "X0831_d8_f1_2s_wt_8_ROI_002", 
"X0831_d8_f1_2s_wt_8_ROI_001", "X0831_d8_f1_10s_wt_8_ROI_019", 
"X0831_d8_f1_10s_wt_8_ROI_018")

我可以使用ldply生成所需的字符向量:

mouse<-ldply(strsplit(cat, "_"))
paste(mouse$V4,mouse$V8,sep="_")

但是正在寻找一种更优雅的方法。也许使用sapply或类似的东西?

我可以生成一个包含一个元素的字符向量:

sapply(strsplit(cat, "_"), "[[",4 )

但无法找到提取这两个元素的方法(并将它们粘贴在一起)。

1 个答案:

答案 0 :(得分:3)

plyr中的示例已经相当不错了,但是sapply中使用anonymous function的方法如下:

sapply(strsplit(cat, "_"), function(x){paste(x[[4]], x[[8]], sep="_")})

apply系列和其他几个函数可以使用匿名函数,您可以在调用中定义它们。在这种情况下,我们有一个函数,它接受列表中的每个成员(作为x),然后将x[[4]]x[[8]]粘贴在一起。