dplyr / r сделать класс spec_tbl_df - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь запустить строку кода, которая читает более 55 столбцов. У 20 из них есть расстояния местоположения от других городов. Этот код ищет кратчайшее расстояние и заполняет новый столбец названием города, который имеет кратчайшее расстояние от местоположения. Я запускаю код на двух почти идентичных наборах данных, за исключением того, что в первом столбце намного больше, чем во втором.

Enrollment_Report$nearest_hub <- hub_locations_list$hub_loc[apply(Enrollment_Report[grep("^dist", names(Enrollment_Report))], 1, which.min)]

Это выдает эту ошибку, но только с первым набором данных:

  invalid subscript type 'list'

Проблема в том, что этот код работает с одним набором данных, а не с другим. В коде нет опечаток, и с первым набором данных класс выглядит следующим образом:

class(Enrollment_Report)
[1] "tbl_df"     "tbl"        "data.frame"

Но второй набор данных, над которым работает код, это класс:

class(all_employee_locations)
[1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"

Мой вопрос: как мне получить первый набор данных класса spec_tbl_df? Я не знаю, почему R читает во втором наборе данных таким образом автоматически, и я не могу найти функцию, которая бы заставляла его читать его таким образом.

Важно, чтобы я сделал этот класс явным, потому что этот код перестал работать с внезапно не работающим (даже после сброса моего сеанса).

1 Ответ

0 голосов
/ 13 июня 2019

Окончательное обновление, это сработало:

Неважно, если это был класс spec_tbl_df. В одном ряду моего стола было много NA По какой-то причине R запутался и подумал, что tibble - это список (хотя опять-таки класс (набор данных) дал tbl). Удаление ряда в основном сетевых элементов разрешило работу кода.

Для дальнейшего использования, если вам НУЖНО, чтобы ваш набор данных был классом spec_tbl_df, то @Akrun был прав, считая, что это побочный продукт readr против readxl. read_csv читает в наборах данных как spec_tbl_df, а read_excel просто читает их как тиблы.

По какой-то причине, если вам нужно, чтобы это был класс spec_tbl_df, мой обходной путь состоял в том, чтобы прочитать файл в виде файла Excel, записать его в виде csv, а затем прочитать его обратно с помощью read_csv. Это сделало его классом spec_tbl_df.

...