【问题标题】:R concate 2 numeric columns with big numbersR concat 2个带有大数字的数字列
【发布时间】:2018-06-11 15:51:53
【问题描述】:

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

【问题讨论】:

  • as.numeric()给出的答案是正确的。只是打印的数字小于数字。 print(test_2,digits=20) 可以显示存储的内容。尽管这仍然不能揭示一切。尝试使用较小的数字,您会看到as.numeric 给出了正确的值
  • 但数字不同怎么可能?单个数字 328897771052600448 在组合数字中转换为 328897771052600428(请参阅最后两个密码“28”而不是“48”)。为什么是“28”?

标签: r concatenation


【解决方案1】:

这些数字太大,无法完全存储为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

【讨论】:

    猜你喜欢
    • 2019-04-16
    • 2019-03-25
    • 1970-01-01
    • 2019-05-02
    • 2016-04-09
    • 2018-02-02
    • 2014-04-03
    • 2023-04-02
    • 2017-10-10
    相关资源
    最近更新 更多