【问题标题】:How to combine result of lapply to a data.frame?如何将 lapply 的结果结合到 data.frame?
【发布时间】:2015-02-22 12:16:48
【问题描述】:

说,我有一个向量和一个函数,它有一个返回 data.frame 的参数。 我想将该函数应用于向量的每个元素,并将结果合并到一个大数据帧中。

我在下面使用 lapply 和 rbind 得到了工作命令。但它在我看来有点“不自然”。有没有更好、更清晰的方法? 我对 plyr 有一些想法,但我想避免使用 plyr,因为我想改用 dplyr。

 my_vector <- c(1,2,3)
 my_function <- function(a){
   unif <- runif(a)
   norm <- rnorm(a)
   return(data.frame(unif=unif, norm=norm))
 }

 as.data.frame(do.call(rbind,(lapply(my_vector, my_function))))

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    试试

    library(dplyr)
    lapply(my_vector, my_function) %>% bind_rows()
    

    【讨论】:

    • 请注意,bind_rows() 的括号不是必需的,因为没有其他参数 - 查看 ?magrittr::`%>%` 了解更多详细信息。
    • @PeterDee 太棒了!这就是我要找的!谢谢!
    • @PeterDiakumis 你有括号恐惧症吗?
    • @ÖmerAn 那时我害怕每个函数需要额外敲击两次键,是的 ;-)
    【解决方案2】:

    你也可以使用data.tablerbindlist如下:

    require(data.table)
    df <- setDF(rbindlist(lapply(my_vector, my_function)))
    

    没有setDF rbindlist 返回data.table 而不是data.frame

    【讨论】:

    • 我意识到这是很久以前的事了,但我试图从您上面的答案中获得输出,同时还有一个包含来自my_vector 的信息的列。那可能吗?我需要知道哪一行对应于my_vector中的哪个对象@
    • 我猜你正在寻找的是一个连接。尝试用谷歌搜索“dplyr join”或“data.table join”
    • 我不知道我将如何使加入工作。我会加入什么? my_vector 只是一个向量,而输出 df 没有该信息(否则我不需要加入)。加上每个向量对象输出的行数不同,所以我不能简单地用seq 或类似的东西手动输入它
    【解决方案3】:

    嵌套列表的解决方案:

      result = bind_rows(lapply(list1, function(x) {
        bind_rows(lapply(list2, function(y) {
          lapply(list3, function(z) {
            read.delim(paste0(x, "_", y, "_", z))
          })
        }))
      }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 2018-07-26
      • 2017-05-09
      • 2020-06-18
      • 1970-01-01
      • 2020-02-16
      相关资源
      最近更新 更多