2016-10-20 16 views
0

В R я пытаюсь найти минимальное значение для столбца, содержащего символьные типы данных. Большинство значений столбца - это фактически числа, но некоторые значения - это только строка «Недоступно».Сортировка столбца, содержащего строковые значения «Недоступные» в R

Я просто использовал это, чтобы получить значения.

minRate <- min(myRows[,columnIndex], na.rm = TRUE) 

Это похоже на работу для большинства моих тестов. Однако, поскольку значения являются строками, значения типа «10.3» сортируются ниже значений, таких как «8.6», потому что «10.6» предшествует «8.6» в алфавитном порядке.

Затем я добавил «as.numeric» к смеси следующим образом:

minRate <- min(as.numeric(myRows[,columnIndex]), na.rm = TRUE) 

Однако, теперь я получаю предупреждение о том, «Nas, введенном путем принуждения». Кроме того, в качестве ответа возвращается «NA», а не фактическое (неправильное) числовое значение.

Есть ли способ удалить значения «Недоступные» и получить реальное минимальное значение из этого столбца?

+1

Использовать 'na.strings =" Недоступно "' 'в' read.csv/read.table' при чтении данных, и вам не нужно преобразовывать на 'numeric'. Что касается проблемы, о которой вы упомянули, может быть, что столбец является классом «фактор». Таким образом, преобразование в числовые числа с целым типом – akrun

+0

@akrun - добавьте это в качестве ответа. Это помогло. – WEFX

+0

Спасибо, я отправил комментарий как решение – akrun

ответ

0

Когда у нас есть строки, которые указывают пропущенные значения как «Недоступные», легче указать соответствующую строку/строки в na.strings аргумента в read.table/read.csv

df1 <- read.csv("file.csv", na.strings = "Not Available", stringsAsFactors=FALSE) 

Если мы не уточняют na.strings, то числовые столбцы будут читаться как прочитанные factor/character (в зависимости от варианта stringsAsfactors). Затем мы должны преобразовать эти столбцы в numeric (больше работы)

1

stringAsFactors = FALSE Этот аргумент может помочь предотвратить автоматическое принуждение при чтении данных. В другом случае попробуйте принудить как символ сначала как числовое, чтобы избежать проблем с коэффициентом усиления при прямом численном принуждении: min(as.numeric(as.character(...)))