Как преобразовать разреженный фрейм данных в числовые значения? - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть фрейм данных с шестью столбцами, сохраненный как CSV-файл.Два столбца очень редки и содержат много пробелов (которые я бы хотел назвать NA).Один редкий столбец flops также имеет очень широкий диапазон значений (от 500 до 93000000000000000).

Я пробовал различные решения от здесь и здесь без удачи.По какой-то причине сохраняется только точка данных 500.

Например:

> DATA$flops2 <- as.numeric(levels(DATA$flops))
Error in `$<-.data.frame`(`*tmp*`, flops2, value = c(NA, NA, NA, NA, NA,  : 
  replacement has 14 rows, data has 79
In addition: Warning message:
NAs introduced by coercion 
> is.numeric(flops2)
[1] TRUE
> flops2
 [1]  NA  NA  NA  NA  NA  NA  NA 500  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
[21]  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
[41]  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
[61]  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
> flops
 [1]                                                                     
 [4]                                                                     
 [7]                        500                                          
[10]                                                                     
[13]                                                                     
[16]                                                                     
[19]                                                                     
[22]                                                                     
[25]                                               3,000,000             
[28]                                               5,000,000             
[31]                                                                     
[34]                                                                     
[37]                        160,000,000                                  
[40]                                                                     
[43]                        800,000,000                                  
[46]                        1,900,000,000                                
[49]                                                                     
[52]                                                                     
[55]                                                                     
[58]                        2,000,000,000,000                            
[61]                                               7,000,000,000,000     
[64] 36,000,000,000,000                                                  
[67] 470,000,000,000,000                                                 
[70]                                                                     
[73]                        16,000,000,000,000,000 34,000,000,000,000,000
[76]                                               93,000,000,000,000,000
[79]                       
14 Levels:  1,900,000,000 16,000,000,000,000,000 160,000,000 ... 93,000,000,000,000,000

То же или подобное происходит для большинства методов преобразования.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

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

DATA$flops2 <- as.numeric(levels(DATA$flops))[DATA$flops]

например

set.seed(24)
v1 <- factor(sample(1:3, 10, replace = TRUE))
as.numeric(levels(v1))[v1]

На основании показанного ввода есть , для числовогозаписей.Возможно, нам придется удалить это и затем преобразовать в numeric

DATA$flops2 <- as.numeric(gsub(",", "", DATA$flops))
0 голосов
/ 30 декабря 2018

Пакет varhandle работает, но все еще является символом, а не цифрой.

> install.packages("varhandle")
> library(varhandle)
> DATA$flops2 <- unfactor(DATA$flops)
...