【问题标题】:Extract and paste multiple elements from a list of lists generated by strsplit从 strsplit 生成的列表列表中提取和粘贴多个元素
【发布时间】:2015-09-15 19:49:24
【问题描述】:

我正在尝试提取并粘贴使用 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 )

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

【问题讨论】:

  • 查看grep,特别是regexprgregexpr,它们会分别给你第一个实例和所有实例的位置。这与substr 一起是我做这类工作的方式
  • 如果第一个字符串总是以s结尾,你可以gsub(".*_(\\d+s)_.*_(\\d+$)", "\\1_\\2", cat)

标签: r string list sapply stringr


【解决方案1】:

您在plyr 中的示例已经很不错了,但这里是在sapply 中使用anonymous function 的方法:

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

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

【讨论】:

  • 太棒了。非常有用的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多