вложенный sapply для преобразования data.frame из целочисленных значений в удвоенные при сохранении десятичных значений в R - PullRequest
0 голосов
/ 13 апреля 2020

Добрый день всем,

Так что я боролся с этим пару дней.

У меня есть data.frame из примерно 20 000 строк и 18 столбцов (20000 X 18) целых значений, около половины из которых являются отрицательными значениями и некоторые нули.

т.е. если я делаю

sapply(fj, typeof)

я получаю -

      volc.X.x       volc.y.x       volc.X.y       volc.y.y     volc.X.x.x     volc.y.x.x     volc.X.y.y     volc.y.y.y   volc.X.x.x.x 
     "integer"      "integer"      "integer"      "integer"      "integer"      "integer"      "integer"      "integer"      "integer" 
  volc.y.x.x.x   volc.X.y.y.y   volc.y.y.y.y volc.X.x.x.x.x volc.y.x.x.x.x volc.X.y.y.y.y volc.y.y.y.y.y         volc.X         volc.y 
     "integer"      "integer"      "integer"      "integer"      "integer"      "integer"      "integer"      "integer"      "integer"

я знаю, что могу сделать

fj_2<-as.data.frame(sapply(fj_1, as.double))

Это, однако, вызывает проблемы с тем, как рассматриваются факторы, поэтому, принимая подсказки из этих сообщений -

Как преобразовать фактор в целое число \ цифра c без потери информации? & { ссылка }

Мне бы пришлось сделать что-то вроде

as.double(as.character(fj$volc.X.x))

или с точки зрения sapply

fj_2<-as.data.frame(sapply(fj, as.character))
and then
fj_2<-as.data.frame(sapply(fj, as.double))

Таким образом, однако, первый sapply с as.character не меняет мои столбцы на тип символов, и поэтому, когда я запускаю sapply с as.double - он преобразует все столбцы в двойной тип , но числа округляются - удаляются все десятичные дроби, а отрицательные значения преобразуются в положительные значения.

Я попытался запустить "гнездо" ed "sapply вот так

fj_2<-as.data.frame(sapply((sapply(fj, as.character)), as.double))

но в итоге получается только один столбец с 360 000 значений, хотя числа в их исходном формате и не округлены.

Что меняется мне нужно сделать? Надеюсь, я прояснил свою проблему.

Спасибо

...