2015-11-23 3 views
0

Я импортировал фрейм данных из CSV-файлаR: Заменить значение в кадре данных as.numeric

dat3 <- read.csv(file.choose(),as.is = TRUE) 

содержит имена и значения. Моя проблема в том, что когда я пытаюсь заменить значение в кадре данных, например.

dat3[3,6]<-12 

тогда он просто предполагает, что "12" представляет собой текстовую строку, а не значение, тем самым предотвращая меня от использования этого числа для математических операций. Я хотел бы иметь возможность заменить некоторые числа в кадре данных и использовать их для математических операций.

Когда я пытаюсь добавить 1 в dat3[3,6], я получаю: «Ошибка в dat3 [3, 6] + 1: нечисловой аргумент для двоичного оператора».

Я пробовал:

lapply(dat3[3,6], as.numeric) 
dat3[3,6]<-as.numeric(12) 

Но это не работает. У меня, однако, нет проблем с использованием уже импортированных чисел в фрейме данных. Это происходит только для чисел, которые я заменяю.

+0

Что такое исходный класс dat3, я думаю, что это уже символ, матрица - это структура атомных данных в R – sinalpha

+0

Вот почему мы храним данные в 'data.frame' (или еще лучше, IMHO, в' data .table'), который позволяет использовать несколько типов данных (по одному на столбец). Матрица может иметь только один тип, поэтому, если столбец _any_ является символом, весь набор будет преобразован. В основе лежит тип «list», который позволяет хранить несколько типов («data.frame» - это особый тип 'list'). Сравните 'cbind (matrix (1: 2, nrow = 2), matrix (c (" a "," b "), nrow = 2))' и 'list (first = 1: 2, second = c (" a "," b "))' – MichaelChirico

+0

Итак, как бы вы импортировали его вместо DataFrame? –

ответ

0

Да!

Я нашел ответ!

Это:

Дат [с (3: 6)] < - sapply (DAT [с (3: 6)], as.numeric)

, чтобы преобразовать столбец чисел.

Спасибо всем!

+1

Лучше указать, какой класс должен иметь столбец, а затем прочитать файл csv. Вы можете посмотреть его здесь http://stackoverflow.com/questions/2805357/specifying-colclasses-in-the-read-csv – nist

Смежные вопросы