Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr/r制造类规范_R_Class_Dataframe_Dplyr_Tibble - Fatal编程技术网

dplyr/r制造类规范

dplyr/r制造类规范,r,class,dataframe,dplyr,tibble,R,Class,Dataframe,Dplyr,Tibble,我试图运行一行代码,读取55列以上的内容。其中20个城市的地理位置与其他城市相距较远。此代码查找最短距离,并用距离该位置最短的城市的名称填充新列。我在两个几乎相同的数据集上运行代码,除了第一个数据集比第二个数据集有更多的列 Enrollment_Report$nearest_hub <- hub_locations_list$hub_loc[apply(Enrollment_Report[grep("^dist", names(Enrollment_Report))], 1, which.

我试图运行一行代码,读取55列以上的内容。其中20个城市的地理位置与其他城市相距较远。此代码查找最短距离,并用距离该位置最短的城市的名称填充新列。我在两个几乎相同的数据集上运行代码,除了第一个数据集比第二个数据集有更多的列

Enrollment_Report$nearest_hub <- hub_locations_list$hub_loc[apply(Enrollment_Report[grep("^dist", names(Enrollment_Report))], 1, which.min)]
问题是这段代码使用的是一个数据集,而不是另一个。代码没有输入错误,对于第一个数据集,类看起来像:

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会以这种方式自动读取第二个数据集,而且我找不到任何函数让它以这种方式读取


重要的是,我要使这个类显式,因为这个代码从工作变为突然不工作(即使在重置会话之后)。

最后更新,它最终工作了:

它是否是类规范并不重要。我的tibble有一排有很多NAs。出于某种原因,R感到困惑,认为TIBLE是一个列表(尽管类(dataset)再次生成了tbl)。删除主要是NAs的行允许代码工作

作为将来的参考,如果您确实需要将数据集设置为类spec_tbl_df,那么@Akrun认为这是readr与readxl的副产品是正确的。read_csv将数据集作为spec_tbl_df读取,read_excel将数据集作为tibble读取


出于某种原因,如果您需要它是类spec_tbl_df,我的解决方法是将文件作为Excel文件读入,将其作为csv写入,然后使用read_csv将其读入。这使得它成为了一个类规范。

您是否从
readr
@akrun阅读了其中一个带有
read\u csv/read\u delim
的数据集,是的!不起作用的是用read_excel读取的,起作用的是用read_csv读取的。有没有办法让read_excel将其作为规范读取?@akrun,update:我做了一个变通方法,将该文件作为excel读取,然后将其作为csv写入并使用readr读取。这确实可以将文件更改为类spec_df_tbl;但是,它仍然不会读取此数据集的代码。@MrFlick,我同意,但我不知道这些数据集是什么让它调用一个列表而不是另一个,特别是当它们都不产生类列表时,以及当代码使用unlist()失败时。不幸的是,我无法发布数据集,因为它是专有的,而且因为我不知道它为什么会产生错误,我不知道如何使其可复制。
class(all_employee_locations)
[1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"