r - prettyNum 更快处理的替代方法
问题描述
我正在处理比我在下面附加的更大的数据集,我需要double
再次编码类型列。我尝试prettyNum
在一个名为的函数中使用,encoder
但它对我的数据的运行速度非常慢。这是我尝试过的方法;
library(data.table)
set.seed(1453)
sample_data <- data.frame(a=sample(1:1000,100,replace=T),
b=sample(1:1000,100,replace=T),
c=sample(seq(1,1000,0.01),100,replace=T),
d=sample(seq(1,1000,0.01),100,replace=T),
e=sample(seq(1,1000,0.01),100,replace=T),
f=sample(seq(1,1000,0.01),100,replace=T),
g=sample(seq(1,1000,0.01),100,replace=T),
h=sample(seq(1,1000,0.01),100,replace=T),
i=sample(LETTERS,1000,replace=T),
j=sample(letters,1000,replace=T))
setDT(sample_data)
options(warn=-1)
double_cols <- which(sapply(sample_data,is.double))
encoder <- function(x) prettyNum(x*1e4,big.mark = '.')
sample_data[,(double_cols):=lapply(.SD,encoder),.SDcols=double_cols]
它已经有效,但我相信有一种更快的解决方案,
提前致谢。
解决方案
您可以使用format
而不是prettyNum
:
library(data.table)
setDT(sample_data)
sample_data1 <- copy(sample_data)
sample_data2 <- copy(sample_data)
options(warn=-1)
encoder1 <- function(x) prettyNum(x*1e4,big.mark = '.')
encoder2 <- function(x) format(x*1e4,big.mark = '.', trim = TRUE)
system.time(sample_data1[,(double_cols):=lapply(.SD,encoder1),.SDcols=double_cols])
user system total
1.27 0.01 1.26
system.time(sample_data2[,(double_cols):=lapply(.SD,encoder2),.SDcols=double_cols])
user system total
0.08 0.00 0.08
推荐阅读
- java - Java 服务器的语言支持在过去 3 分钟内崩溃了 5 次。服务器不会重启
- python-3.x - 当 central_longitude=180 时无法在右侧显示 0 刻度
- cmd - 打印元素值时条件不能正常工作?
- c - 结构类型的 malloc() 的返回值
- android - 如何从“现有”android studio 项目创建 *.aar 文件(不创建新的 android 库)?
- java - 如果在我的给定 Java 代码上放置错误值并返回 ELSE 语句,如何修复循环
- mysql - mysql join和json输出
- php - 使用php中的文件上传进行用户注册
- node.js - Angular 7 HttpClient post请求未发送到nodejs服务器
- c# - 如何从 ASP.NET Core 中的请求标头或 url 读取会话 ID?