R汇总2个带有大数字

时间:2018-06-11 15:51:53

标签: r concatenation

我想用数字连接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 :(得分:3)

这些数字很大,与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