столбец в фрейме данных не читается должным образом с функцией read_xls в R

Итак, я начал выполнять некоторую статистику по фрейму данных, который я прочитал, используя функцию read_xls из пакета readxl (версия: 1.1.0), когда я понял, что R не читает столбец так, как я хотел. Столбец имеет много пробелов в электронной таблице Excel, что, как я считаю, после некоторых исследований является проблемой. После большого количества пустых строк столбец действительно имеет числовые значения, которые мне нужны для выполнения анализа в R. Однако, когда Я прочитал это с помощью функции read_xls, она дает ему логический класс и все NA ... После просмотра этого веб-сайта readxl мне кажется очевидным, что эта проблема связана с пробелами в столбце. Я все еще не понимаю, как решить эту проблему, поскольку только один из столбцов имеет пробелы в начале набора данных. Буду признателен за любую помощь или руководство! Спасибо! Столбец, который вызывает у меня проблемы, - Rep_Val_Quantity_Avg.

вывод данных:

 dput(head(df_trib,10))
structure(list(NJPDES = c("NJ0020206", "NJ0020532", "NJ0021326", 
"NJ0022021", "NJ0022985", "NJ0023361", "NJ0023736", "NJ0024015", 
"NJ0024031", "NJ0024040"), Facility_Name = c("ALLENTOWN BORO WWTP", 
"HARRISON TWP MULLICA HILL WWTP", "MEDFORD LAKES BOROUGH STP", 
"SWEDESBORO WTP", "WRIGHTSTOWN BOROUGH STP", "WILLINGBORO WATER POLLUTION CONTROL PLANT", 
"PINELANDS WASTEWATER CO", "MOUNT HOLLY WPCF", "ELMWOOD WTP", 
"WOODSTREAM STP"), `Monitored Location Designator` = c("001A", 
"001A", "001A", "001A", "001A", "001A", "001A", "001A", "001A", 
"001A"), Date = structure(c(1372550400, 1372550400, 1372550400, 
1372550400, 1372550400, 1372550400, 1372550400, 1372550400, 1372550400, 
1372550400), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Parameter_Number_DMR = c("00300", "00300", "00300", "00300", 
    "00300", "00300", "00300", "00300", "00300", "00300"), Parameter = c("Oxygen, Dissolved (DO)", 
    "Oxygen, Dissolved (DO)", "Oxygen, Dissolved (DO)", "Oxygen, Dissolved (DO)", 
    "Oxygen, Dissolved (DO)", "Oxygen, Dissolved (DO)", "Oxygen, Dissolved (DO)", 
    "Oxygen, Dissolved (DO)", "Oxygen, Dissolved (DO)", "Oxygen, Dissolved (DO)"
    ), Sample_Point_Desc = c("Effluent Gross Value", "Effluent Gross Value", 
    "Effluent Gross Value", "Effluent Gross Value", "Effluent Gross Value", 
    "Effluent Gross Value", "Effluent Gross Value", "Effluent Gross Value", 
    "Effluent Gross Value", "Effluent Gross Value"), Rep_Val_Quantity_Avg = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), X__1 = c(NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA), `Reported Value Quantity Maximum` = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), `Quantity Units Description` = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), Rep_Val_Con_Min = c("7.2", 
    NA, "7.65", "6.79", NA, NA, "6", NA, "6.6", NA), Val_Con_AVG = c("7.3", 
    "8.8", NA, "7.58", "7.5", "7.100", "5", "7.8", "6.6", "7.4"
    ), Rep_Val_Con_Max = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_), valunit = c("MILLIGRAMS PER LITER", 
    "MILLIGRAMS PER LITER", "MILLIGRAMS PER LITER", "MILLIGRAMS PER LITER", 
    "MILLIGRAMS PER LITER", "MILLIGRAMS PER LITER", "MILLIGRAMS PER LITER", 
    "MILLIGRAMS PER LITER", "MILLIGRAMS PER LITER", "MILLIGRAMS PER LITER"
    )), .Names = c("NJPDES", "Facility_Name", "Monitored Location Designator", 
"Date", "Parameter_Number_DMR", "Parameter", "Sample_Point_Desc", 
"Rep_Val_Quantity_Avg", "X__1", "Reported Value Quantity Maximum", 
"Quantity Units Description", "Rep_Val_Con_Min", "Val_Con_AVG", 
"Rep_Val_Con_Max", "valunit"), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

Используемый код:

df_trib<-read_xls("4_Del_Tribs_ DMR data all pull for certain params.xls",
                              sheet = "NJEMS DATA", col_names = TRUE,
                              col_types = c("text","text","text","date","text","text","text",
                                            "numeric","numeric","text","numeric",
                                            "numeric","numeric","text","text"))

person NBE    schedule 31.07.2018    source источник
comment
Вы пробовали использовать параметр col_types = в read_xls и указывать тип переменной для каждого столбца?   -  person Dave2e    schedule 31.07.2018
comment
В частности, обычно проще всего использовать тип catch all character для чтения в беспорядочных столбцах.   -  person Calum You    schedule 31.07.2018
comment
@ Dave2e Да, я пробовал использовать параметр col_types =, но это не решает проблему ... Как указано в вопросе, я думаю, что это связано с большим количеством пробелов перед первой точкой данных в этом столбце .. Есть ли у вас предложения, как решить эту проблему?   -  person NBE    schedule 01.08.2018
comment
Возможно изменение параметра guess_max =. Без лучшего описания файла Excel и кода, который вы использовали, трудно воспроизвести проблему, с которой вы столкнулись, и оказать какую-либо значимую помощь.   -  person Dave2e    schedule 01.08.2018
comment
@ Dave2e добавил код, который я использую. Не уверен, что еще лучше описать файл Excel. Столбец, который вызывает у меня проблему, - это Rep_Val_Quantity_Avg. Причина в том, что в нем есть пустые ячейки для первых 1000 строк ... Я просто не понимаю, как решить эту проблему в R, поскольку я новичок в использовании программного обеспечения ...   -  person NBE    schedule 01.08.2018
comment
@ Dave2e, поскольку у него есть пустые ячейки для первых 1000 строк, он дает NAs всего столбца. Чего я не хочу, потому что после строки 1000 нужны ценные данные, необходимые для анализа.   -  person NBE    schedule 01.08.2018


Ответы (1)


В функции read_excel по умолчанию аргумент guess_max составляет не более 1000 строк. Вы можете заставить read_excel смотреть за пределы первых 1000 строк и перейти к фактическим точкам данных, увеличив guess_max.

person Lambda Moses    schedule 05.08.2018
comment
Не знаете, зачем мне использовать guess_max, когда я добавляю аргумент col_types с типом переменной для каждого столбца? Вы можете объяснить? - person NBE; 06.08.2018
comment
Технически вам действительно не нужно guess_max, если вы укажете col_types. Мне просто интересно, может ли помочь использование guess_max. Я попытался воспроизвести вашу проблему на игрушечном примере (все NA, кроме одного числа в 1200-й строке), но не смог; этот столбец был правильно прочитан как double в моем случае, хотя двойное NA печатается как логическое NA в тиббайтах. Наверное, есть какая-то другая проблема. - person Lambda Moses; 06.08.2018