【问题标题】:unlist to produce a vector of same lengthunlist 生成相同长度的向量
【发布时间】:2019-10-04 01:51:42
【问题描述】:

我有一个这样的列表:

lst <- list(a = c("y"), b = c("A", "B", "C"), c = c("x1", "x2"))
lst

> lst
$a
[1] "y"

$b
[1] "A" "B" "C"

$c
[1] "x1" "x2"

如果我unlist 它,我会得到:

unlist(lst)
> unlist(lst)
   a   b1   b2   b3   c1   c2 
 "y"  "A"  "B"  "C" "x1" "x2" 

我怎样才能得到这样的向量:

        a         b         c 
      "y" "A, B, C"  "x1, x2" 

编辑: 之前回答了类似的问题Convert a list of lists to a character vector。 @42_sapply( l, paste0, collapse="") 提出的答案可以稍加修改使用:sapply( l, paste0, collapse=", ")。 Ronak Shah 对我的问题的sapply(lst, toString) 更直观一点。

【问题讨论】:

  • 谢谢。这与上一个问题略有不同。这些答案的一个小修改将解决我的问题。 Ronak Shah 的解决方案 sapply(lst, toString) 比以前的答案更简单。
  • """, " 之一的分隔符似乎没有本质区别
  • 对于新的 R 用户来说,我们很难理解像 applypaste 这样的函数。最小的差异可能需要很长时间才能解决。 Ronak Shah 的解决方案直接回答了我的问题,简单明了。我从这个答案中学到了一些新的和有用的东西,这也可以帮助其他人。

标签: r list vector character


【解决方案1】:

我们可以使用toString 将每个列表中的所有元素折叠成一个逗号分隔的字符串。

sapply(lst, toString)
#     a       b       c 
#    "y" "A,B,C" "x1,x2" 

这与使用pastecollapse 参数作为"," 相同

sapply(lst, paste, collapse = ",")

【讨论】:

    【解决方案2】:

    你也可以这样做

    unlist(Map(function(x) paste0(x,collapse = ","),lst))

    或者

    unlist(lapply(lst,function(x) paste0(x,collapse = ",")))

    或者使用purrr

    purrr::map_chr(lst,paste0,collapse = ",")

    【讨论】:

      【解决方案3】:

      我们可以使用map

      library(purrr)
      library(stringr)
      map_chr(lst, str_c, collapse=",")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 2015-10-02
        • 1970-01-01
        • 2022-06-17
        • 2012-06-03
        • 2017-02-15
        • 2012-04-15
        相关资源
        最近更新 更多