2014-07-23 2 views
1

Для некоторых функций, которые я хотел бы представить в своих данных, мне нужны числовые значения в моем кадре данных. Теперь они в формате фактора.Преобразование коэффициента в числовое значение в кадре данных

Есть ли какой-либо простой способ «преобразовать» весь кадр данных в числовой?

Часть 'dput':

"0.966968221", "0.971526427", "0.975908363", "0.976354638", 
    "0.983503732", "0.984850291", "0.985224666", "0.987182132", 
    "0.987468192", "0.988309086", "0.994685984", "0.996238630", 
    "0.997917853", "0.998762891", "0.999968143", "1.000000000" 
    ), class = "factor")), .Names = c("10", "33.95", "58.66", 
"84.42", "110.21", "134.16", "164.69", "199.1", "234.35", "257.19", 
"361.84", "432.74", "506.34", "581.46", "651.71", "732.59", "817.56", 
"896.24", "971.77", "1038.91"), row.names = c("at1g01050.1", 
"at1g01080.1", "at1g01090.1", "at1g01320.2", "at1g01470.1", "at1g01800.1" 
), class = "data.frame") 

класса значений в data.frame:

> class(tbl_alles[103,5]) 
[1] "factor" 
> class(tbl_alles[553,12]) 
[1] "factor" 

То, что я пытался до сих пор:

Первая попытка:

tbl_alles <- sapply(tbl_alles, as.numeric) ## Changing the values in the data frame 

Вторая попытка:

> as.numeric(as.character(tbl_alles)) 
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
Warning message: 
NAs introduced by coercion 

Третья попытка:

> as.numeric(levels(tbl_alles))[tbl_alles] 
Error in as.numeric(levels(tbl_alles))[tbl_alles] : 
    invalid subscript type 'list 

Любое решение?

ответ

3

Один из способов сделать это:

tbl_alles[sapply(tbl_alles, is.factor)] <- lapply(tbl_alles[sapply(tbl_alles, is.factor)], function(x) as.numeric(as.character(x))) 

Эта функция будет искать столбцы типа factor и преобразовать их в класс numeric

Другой вариант (возможно, немного быстрее) использует data.table пакет

library(data.table) 
setDT(tbl_alles)[, names(tbl_alles) := lapply(.SD, function(x) if(is.factor(x)) as.numeric(as.character(x)) else x)] 

Если весь ваш набор данных относится к типу factor и вы хотите перенести все столбцы для numeric типа, вы могли бы сделать

tbl_alles[] <- lapply(tbl_alles, function(x) as.numeric(as.character(x))) 
+1

+1, для последнего случая, я бы также использовать: tbl_alles [] <- lapply (tbl_alles, функция (х) as.numeric (как. характер (x))) – akrun

+0

@akrun, Большое предложение. Я всегда забываю '[]' сохранение формата. :). Отредактировано –

+0

Последнее работает идеально для меня. Я не смотрел на других, но большое спасибо! –

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