2015-12-23 2 views
2

В R Я хочу извлечь конечную цифру числа в целочисленном формате. Однако вывод моего кода содержит ошибки округления. Я предполагаю, что это вызвано функцией as.integer, но я не знаю, как это исправить. Также обратите внимание, что мой фактический набор данных составляет около 10 ГБ, поэтому скорость здесь очень важна.R: Ошибка округления при извлечении конечной цифры из числа

library("data.table") 
data<-c(72.15,72.02,72.00,71.90,71.85,71.74,72.60) 
DT<-data.table(data) 
DT[,end_digit:=as.integer((data*100))%%10] 

    data end_digit 
1: 72.15   5 
2: 72.02   2 
3: 72.00   0 
4: 71.90   0 
5: 71.85   4 
6: 71.74   3 
7: 72.60   9 

Чтобы было ясно, ожидаемый результат:

data end_digit 
1: 72.15   5 
2: 72.02   2 
3: 72.00   0 
4: 71.90   0 
5: 71.85   5 
6: 71.74   4 
7: 72.60   0 
+0

Не можете ли вы попробовать «DT [, end_digit: = substr (data * 100,4,4)]' – akrun

ответ

5

Использование round, начиная с as.integer усекает.

DT[,end_digit:=round(data*100)%%10] 
DT 
    data end_digit 
1: 72.15   5 
2: 72.02   2 
3: 72.00   0 
4: 71.90   0 
5: 71.85   5 
6: 71.74   4 
7: 72.60   0 
1
DT[, end_digit := round((data * 100)) %% 10] 
Смежные вопросы