【问题标题】:Unlist and combine elements into data frame r取消列出并将元素组合到数据框 r
【发布时间】:2014-12-21 06:09:30
【问题描述】:

我有一个如下列表(提供了 2 个元素),长度为数千。

[[1]]
[1] "few/JJ"        "enough/JJ"     "particular/JJ"

[[2]]
[1] "signifcant/JJ" "last/JJ"       "individual/JJ" "effective/JJ"

我想将其转换为具有 1 列的数据框,格式如下,其中数据类型为字符:

 few enough particular

 significant last individual effective

我尝试了一些 do.call、unlist 和 lapply 的组合,但似乎无法获得正确的格式。

任何帮助将不胜感激!

【问题讨论】:

  • 上面的列表有 7 行。我想返回两行,一个用于上面显示的每个列表元素
  • 所以你不想要/JJ 部分?
  • @Josh S 看起来你想要它作为字符串 "few enough particular" 因为 1 列预期结果。
  • 我希望也去掉“/JJ”,只是希望忽略不同的长度......即每个元素之间的空格。谢谢!
  • unlist(lapply(lst, function(x) paste(gsub("\\/.*", "", x), collapse=" ")))

标签: r list


【解决方案1】:

x 是您的列表,您可以使用 vapply,因为您知道结果将是单长度字符向量。这有时会更快更安全,因为 R 事先知道结果向量的结构。

data.frame(colname = vapply(x, function(y) {
    paste(sub("/.*", "", y), collapse = " ")
}, character(1L)), stringsAsFactors = FALSE)
#                                colname
# 1                few enough particular
# 2 signifcant last individual effective

【讨论】:

    【解决方案2】:
    d2 <- data.frame(Col1=gsub("(?:/)[^ ]+", "",
             sapply(lst, paste, collapse=" "), perl=TRUE),
                       stringsAsFactors=FALSE)
    
    d2
    #                                   Col1
    #1                 few enough particular
    #2 significant last individual effective
    

    数据

     lst <-  list(c("few/JJ", "enough/JJ", "particular/JJ"),
        c("significant/JJ", "last/JJ", "individual/JJ", "effective/JJ"))
    

    【讨论】:

    • 上面的列表有 7 行。我想返回两行,一个用于上面显示的每个列表元素
    猜你喜欢
    • 2018-08-04
    • 2014-12-12
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多