【问题标题】:Reading information from the filename从文件名中读取信息
【发布时间】:2014-05-07 08:06:14
【问题描述】:

我有以下字符列表:

$`1`
[1] "TEMP_sim_zone1_cell_1_5_"

$`5`
[1] "TEMP_sim_zone1_cell_1_5_"

$`6826`
[1] "TEMP_sim_zone338_cell_6826_"

$`9888`
[1] "TEMP_sim_zone615_cell_9888_9890_9895"

$`9890`
[1] "TEMP_sim_zone615_cell_9888_9890_9895"

$`9892`
[1] "TEMP_sim_zone614_cell_9892"

$`9895`
[1] "TEMP_sim_zone615_cell_9888_9890_9895"

由此,我想创建这个矩阵(nrow=7,ncol=2):

   1  1
   5  2
6826  1
9888  1
9890  2
9892  1
9895  3

例如,单元格 9888、9890 和 9895 应在文件“TEMP_sim_zone615_cell_9888_9890_9895”中读取。 9888 位于第 1 位,9890 位于第 2 位,9895 位于第 3 位(此信息应取自文件名中单元格的位置)。

有人可以帮我吗?

【问题讨论】:

    标签: r filenames


    【解决方案1】:

    这是另一种方式,temp 是您的列表(根据@Thomas 的建议进行了简化)

    temp2 <- mapply(match, names(temp), strsplit(gsub("^.*\\cell_", "", temp), "_"))
    temp2 <- cbind(as.numeric(names(temp2)), as.numeric(temp2))
    
    #      [,1] [,2]
    # [1,]    1    1
    # [2,]    5    2
    # [3,] 6826    1
    # [4,] 9888    1
    # [5,] 9890    2
    # [6,] 9892    1
    # [7,] 9895    3
    

    【讨论】:

    • 这可以简化为mapply(match, names(temp), strsplit(gsub("^.*cell_", "", temp), "_")) 不需要额外的lapply,因为gsub 是矢量化的。
    【解决方案2】:

    获取命名向量的方法如下:

    sapply(names(l), function(x) {
      s <- sub('.+_cell_', '', l[[x]])
      ids <- strsplit(s, '_', fixed = TRUE)[[1]]
      which(ids == x)
    })
    #    1    5 6826 9888 9890 9892 9895 
    #    1    2    1    1    2    1    3 
    

    【讨论】:

    • +1,但要获取 OP 请求的矩阵输出格式,请将返回值更改为 c(as.numeric(x), which(ids == x)),然后将 sapply 包装在 t() 中。
    猜你喜欢
    • 2013-06-28
    • 2013-09-19
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2014-05-27
    • 2011-05-09
    • 2011-09-07
    • 2020-12-20
    相关资源
    最近更新 更多