【发布时间】:2019-06-12 20:16:38
【问题描述】:
我正在尝试运行一行代码来读取超过 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 会以这种方式自动读取第二个数据集,而且我找不到任何函数让它以这种方式读取它。
让这个类显式很重要,因为这段代码从工作变为突然不工作(即使在重置我的会话之后)。
【问题讨论】:
-
你有没有从
readr读到read_csv/read_delim的数据集之一 -
@akrun,是的! 不 工作的那个是用 read_excel 读入的,而工作的那个是用 read_csv 读入的。有没有办法让 read_excel 将其作为 spec_tbl_df 读入?
-
@akrun,更新:我做了一个解决方法,将文件作为 excel 读取,然后将其写入 csv 并使用 readr 读取。这确实将文件更改为类spec_df_tbl;但是,它仍然不会读取此数据集的代码。
-
@MrFlick,我同意,但我不知道这些数据集是什么使它成为列表而不是另一个,特别是当它们都没有产生类列表时,并且当即使使用 unlist(),代码也会失败。不幸的是,我无法发布数据集,因为它是专有的,而且因为我不知道它为什么会产生错误,所以我不知道如何使其可重现。
标签: r class dataframe dplyr tibble