Я думаю, что проблема связана с тем фактом, что ноль после точки преобразуется в пустой символ ""
. Вот очень эффективное и быстрое решение с data.table и stringr , хотя и более многословным. Мне нравится многословие, если оно сочетается со скоростью и эффективностью, что происходит от языка set()
.
library(data.table)
df <- data.frame( x = c(1.2, 3.4, 0.6, 7.0, 0.0) )
dt = as.data.table( str_split( df$x, pattern = "\\.", simplify = TRUE ) )
for(col in names(dt)) {
set(dt, i = which( dt[[ col ]] == "" ), j = col, value = "0")
}
setnames( dt, names(dt), c( "integer", "fractional" ) )
> dt
integer fractional
1: 1 2
2: 3 4
3: 0 6
4: 7 0
5: 0 0
Обратите внимание, что str_split()
делает именно то, что я сказал выше. Посмотрите ниже:
> str_split( df$x, pattern = "\\.", simplify = TRUE )
[,1] [,2]
[1,] "1" "2"
[2,] "3" "4"
[3,] "0" "6"
[4,] "7" ""
[5,] "0" ""
Как видите, десятичных нулей больше нет!