首页 > 解决方案 > R用大数字连接2个数字列

问题描述

我想用数字连接 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)

标签: rconcatenation

解决方案


这些数字太大而不能完全存储为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

推荐阅读