首页 > 解决方案 > 如何将 bind_rows 与 tibble 一起使用?

问题描述

我正在尝试使用 tidyverse 中的 bind_rows 和 tibble,并得到意想不到的结果。

当我将几个数据框组合在一起bind_rows然后将它们转换为 atibble时,列名会变得混乱:

library(tidyr)
pred.models <- c('1.csv', '2.csv', '3.csv')
prediction.slides <- list()
for (modelid in pred.models){
  tmp <- read.csv(modelid)
  tmp[,'modelid'] <- modelid
  prediction.slides[[length(prediction.slides)+1]] <- (tmp)
}

prediction.slides <- (bind_rows(prediction.slides))
typeof(prediction.slides)
# -> list
# now let's see what we got:
prediction.slides
# -> `bind_rows(prediction.slides)`$hash      $class_prob $modelid 

但是,当我尝试以下操作时:

pred.models <- c('1.csv', '2.csv', '3.csv')
prediction.slides <- list()
for (modelid in pred.models){
  tmp <- read.csv(modelid)
  tmp[,'modelid'] <- modelid
  ############################################  Changed here:
  prediction.slides[[length(prediction.slides)+1]] <- tibble(tmp)
}

prediction.slides <- (bind_rows(prediction.slides))

Error: Argument 1 can't be a list containing data frames在最后一行收到错误。bind_rows考虑到根据文档组合数据帧列表,这很奇怪。

知道如何正确地做到这一点并获得一个不错的 tibble 作为输出吗?

UPD:csv 文件如下所示:

hash,class_prob
1578d8,0.9451976000
1c7644,0.4519760001
dc7358,0.5197600012

标签: rtidyversetidyr

解决方案


原因是它tibble()没有做你认为它做的事情。你需要as_tibble()tibble()用于从给定的输入构造 data.frames,同时as_tibble()将输入转换为 tibble,这正是您想要的。


推荐阅读