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