2013-12-02 2 views
1

Когда я создаю простой кадр данных,R упорядочение раскалывается упорядочение записей с разным количеством цифр слева от десятичной

dd <- data.frame(x = c('a','b','c','d','e','f','g','h','i','j','k','l','m'),z = c(11.2, 1.1, 911, 2,34453,11.2,106.45,44,22,12,1,19,19.1)) 
> dd 
    x  z 
1 a 11.20 
2 b  1.10 
3 c 911.00 
4 d  2.00 
5 e 34453.00 
6 f 11.20 
7 g 106.45 
8 h 44.00 
9 i 22.00 
10 j 12.00 
11 k  1.00 
12 l 19.00 
13 m 19.10 

Я могу заказать строки в колонке г,

> dd[order(dd$z),] 
    x  z 
11 k  1.00 
2 b  1.10 
4 d  2.00 
1 a 11.20 
6 f 11.20 
10 j 12.00 
12 l 19.00 
13 m 19.10 
9 i 22.00 
8 h 44.00 
7 g 106.45 
3 c 911.00 
5 e 34453.00 

, но при чтении из фрейма данных из файла размером 46 X ~ 5000 .csv я получаю результат, который, по-видимому, заказывает значения с двумя цифрами слева от десятичной, а затем с одной цифрой слева от десятичной. Как заказать в строго восходящем порядке?

1940              11.8 
1976              11.9 
1921              12.1 
1916              12.4 
1967              12.5 
1917              12.6 
1918              12.6 
1975              13.0 
1919              13.8 
1952              14.3 
1930              7.9 
1920              8.3 
1963              8.4 
1950              8.5 
1927              8.6 
1926              8.7 
1960              8.7 
1915              8.8 
+0

Это, вероятно, факторы. Попробуйте повторить шаг read.table со строкамиAsFactors = FALSE и colClasses = c ("character", "numeric"). –

+0

Привет, спасибо за совет, но я установил (используя read.csv), строкиAsFactors = FALSE, colClasses = c ("Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure" = "numeric") и получил ошибку «scan() ожидается« реальный »получил« 11.4 »« –

+0

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

ответ

3

Похоже, что ваша колонка была прочитана как строки вместо цифр.

Просто преобразовать в цифровой:

dd[["z"]] <- as.numeric(dd[["z"]]) 

Если вы получите сообщение о NA s принуждают в, то у вас есть какие-то корявые данные.

Проверьте которые NA, а затем проверить исходные данные:

index.to.NAs <- which(is.na(dd[["z"]])) 
rawData <- readLines("path/to.file.csv") 
rawData[index.to.NAs] 
Смежные вопросы