【问题标题】:combining elements in a list of lists in R在R中的列表列表中组合元素
【发布时间】:2021-05-17 04:15:52
【问题描述】:

我有一个名为 samples_ID 的列表,其中包含 116 个向量,每个向量都有如下三个元素:

"11"         "GT20-16829" "S27"

我想保留 116 个向量,但是像这样将元素组合成一个元素

"11_GT20-16829_S27"

我试过这样的

samples_ID_ <- paste(samples_ID, collapse = "_")

它返回一个向量,下面只是它的一部分:

..._c(\"33\", \"GT20-16846\", \"S24\")_c(\"33\", \"GT20-18142\", \"S72\")_c(\"34\", \"GT20-16819\", \"S50\")_c...

我做错了什么? 你能帮我吗? 谢谢

【问题讨论】:

  • 只需使用 dput 并提供您的数据样本 .. 突然其他人将能够帮助您 ..
  • lapply(samples_ID, paste, collapse="_")怎么样
  • lapply 会起作用,sapply 会自动强制转换为长度为 116 的向量。lapply 的结果通常需要触摸do.call(c, lapply(...)) 才能获得向量。还有其他方法可以解决这个问题,例如unlist

标签: r apply paste collapse


【解决方案1】:

一个整洁的选项。

library(stringr)
library(purrr)

map(samples_ID, ~ str_c(., collapse = '_'))

# [[1]]
# [1] "11_GT20-16829_S27"
# 
# [[2]]
# [1] "12_GT20-16830_S28"

数据

samples_ID <- list(c("11", "GT20-16829", "S27"), c("12", "GT20-16830", "S28"
))

【讨论】:

    【解决方案2】:

    base R,我们可以使用sapply

    sapply(samples_ID, paste, collapse="_")
    

    【讨论】:

      【解决方案3】:

      另一个使用paste的基本R选项

      do.call(paste, c(data.frame(t(list2DF(samples_ID))), sep = "_"))
      

      do.call(paste, data.frame(do.call(rbind, samples_ID)), sep = "_"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        相关资源
        最近更新 更多