R concate 2 числовых столбца с большими числами - PullRequest
0 голосов
/ 11 июня 2018

Я хочу объединить 2 столбца с числами и получить в результате число.Пример: Первый столбец: 123456 Второй столбец: 78910 Желаемый результат: 12345678910

test<-matrix(
  c(328897771052600448,4124523780886268),
  nrow=1,
  ncol=2
)

test<-data.frame(test)

str(test)

Оба столбца являются числовыми

colnames(test)<-c("post_visid_high","post_visid_low")

test_2<-transform(test,visit_id=as.numeric(paste0(post_visid_high,post_visid_low)))

Проблема: Мой конечный результат дает: 3.288977710526004289528e + 33 Я не понимаюпочему я получаю это (неверное ??) число.

Когда я излагаю "as.numeric", я получаю правильный результат:

    test_2<-transform(test,visit_id=paste0(post_visid_high,post_visid_low))
test_2

Но его преобразуют в "фактор":

str(test_2)

1 Ответ

0 голосов
/ 11 июня 2018

Эти цифры слишком велики, чтобы их можно было хранить в точности как numeric.Вы можете сохранить их в виде строки, указав stringsAsFactors = FALSE:

test_2<-transform(test,visit_id=paste0(post_visid_high,post_visid_low), stringsAsFactors = FALSE)
test_2
#>   post_visid_high post_visid_low                           visit_id
#> 1    3.288978e+17   4.124524e+15 3288977710526004484124523780886268
str(test_2)
#> 'data.frame':    1 obs. of  3 variables:
#>  $ post_visid_high: num 3.29e+17
#>  $ post_visid_low : num 4.12e+15
#>  $ visit_id       : chr "3288977710526004484124523780886268"

Или используйте что-то вроде gmp для обработки целых чисел произвольного размера:

library(gmp)
test_3 <- test
test_3$visit_id <- as.bigz(paste0(test_3$post_visid_high, test_3$post_visid_low))
test_3
#>   post_visid_high post_visid_low                           visit_id
#> 1    3.288978e+17   4.124524e+15 3288977710526004484124523780886268
str(test_3)
#> 'data.frame':    1 obs. of  3 variables:
#>  $ post_visid_high: num 3.29e+17
#>  $ post_visid_low : num 4.12e+15
#>  $ visit_id       : 'bigz' raw 3288977710526004484124523780886268
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...