Подтвердить что ты не робот

Изменение значений при преобразовании типа столбца в числовой

У меня есть файл данных с форматом сверху.
Я загрузил его в R и попытался построить гистограмму со значениями из столбца dist и получил ошибку "x должен быть числовым". Поэтому я попытался изменить формат.

> head(data)

    V1        V2
1 type gene_dist
2    A     64667
3    A     76486
4    A     97416
5    A     30876
6    A     88018

> summary(data)
    V1            V2     
 A   : 67   100    :  1  
 B   :122   100906 :  1  
 type:  1   102349 :  1  
            1033   :  1  
            10544  :  1  
            10745  :  1  
            (Other):184  

Я попытался установить формат для столбца с помощью sapply, но значения изменены:

> data[,2]<-sapply(data[,2],as.numeric)

> head(data)
    V1  V2
1 type 190
2    A 146
3    A 166
4    A 189

summary(data)
    V1            V2        
 A   : 67   Min.   :  1.00  
 B   :122   1st Qu.: 48.25  
 type:  1   Median : 95.50  
            Mean   : 95.50  
            3rd Qu.:142.75  
            Max.   :190.00 

Кто-нибудь знает, почему это происходит?

4b9b3361

Ответ 1

Похоже, что ваш второй столбец является фактором. Вам нужно использовать as.character до as.numeric. Это связано с тем, что факторы хранятся внутри как целые числа с таблицей, чтобы дать метки уровня факторов. Просто использование as.numeric даст только внутренние целые коды. Нет необходимости использовать sapply, поскольку эти функции векторизованы.

data[,2] <- as.numeric(as.character(data[,2]))

Вероятно, столбец является фактором, потому что в некоторых элементах есть некоторые нечисловые символы. Любые такие записи будут преобразованы в NA с соответствующим предупреждением, но вы можете изучить это в своих исходных данных.

Как побочная заметка, data является белым (хотя и недействительным) выбором для имени переменной, так как существует базовая функция с тем же именем.

Ответ 2

У меня была такая же проблема для матрицы, содержащей значения "list", когда объект data был прочитан из read.csv. as.character() здесь не работает, а as.numeric() и data.matrix() изменили значения в матрице. Вместо этого вам необходимо использовать следующее:

matrix_numeric[1:m,1:n] <- as.numeric(as.matrix(data[1:m,1:n]))

Сначала преобразование в символ, а затем в двойное. Для данных размерности матрицы [m, n]. (вам нужно сначала создать объект matrix_numeric перед назначением значений... matrix_numeric <- matrix(0,m,n))

Для вектора vec1 в формате списка я использую следующее:

out1 <- as.numeric(unlist(vec1));

Ответ 3

Вероятно, гораздо лучше исправить это при чтении файла, чем при использовании as.numeric() или as.character(). При чтении файла убедитесь, что

  • header=TRUE, если первая строка - это заголовок
  • NA, а не NA или NaN (ctrl + H и заменить NA в вашем файле данных)
  • никакие другие символьные строки в ваших числовых столбцах

Тогда R автоматически рассмотрит их как числовые.