как использовать bind_rows с tibble? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь использовать bind_rows и tibble из tidyverse и получаю неожиданные результаты.

Когда я объединяю несколько фреймов данных с bind_rows, а затем преобразовываю их в tibble, имена столбцов портятся up:

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 предназначен для объединения списка фреймов данных в соответствии с документами.

Любая идея, как сделать это правильно и получить хороший вывод в виде вывода?

UPD: CSV-файлы выглядят следующим образом:

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

1 Ответ

1 голос
/ 21 февраля 2020

Причина в том, что tibble() не делает то, что вы думаете, что делает. Вам нужно as_tibble() вместо этого. tibble() используется для построения data.frames из заданных входных данных, в то время как as_tibble() преобразует входные данные в тиббл, что вам и нужно.

...