gpt4 book ai didi

r 使用 gsub、trim 等修剪 data.frame 或 data.table 中的列

转载 作者:行者123 更新时间:2023-12-04 10:47:32 25 4
gpt4 key购买 nike

我有一个关于删除 data.frame 或 data.table 中的前导空格的问题。

我有可行的解决方案,但我正在尝试加快我的代码速度。

以下是一些示例数据:

number_strings <- paste("  ",seq(from=1, to=100000, by=1),"  ",sep="")

data <- as.data.frame(matrix(number_strings,nrow=length(number_strings),ncol=10),stringsAsFactors=FALSE)
colnames(data) <- paste("Col",seq(from=1, to=ncol(data), by=1),sep="")

以下是我想修剪的一些列:
odd_columns <- paste("Col",seq(from=1, to=ncol(data), by=2),sep="")

以下是我目前拥有的三个选项:
f_trim_for <- function(x,cols){
for(i in 1:length(cols))
{
x[,cols[i]] = trim(x[,cols[i]])
}
return(x)
}
system.time(data1 <- f_trim_for(data,odd_columns))

f_gsub_for <- function(x,cols){
for(i in 1:length(cols))
{
x[,cols[i]] <- gsub("^\\s+|\\s+$", "", x[,cols[i]], perl = TRUE)
}
return(x)
}
system.time(data2 <- f_gsub_for(data,odd_columns))

f_trim_dt <- function(x,cols){
data.table(x)[, (cols) := trim(.SD), .SDcols = cols]
}
system.time(data3 <- f_trim_dt(data,odd_columns))

以下是时间:
              user  system elapsed 
f_trim_for 1.50 0.08 1.92
f_gsub_for 0.75 0.00 0.74
f_trim_dt 0.81 0.00 1.17

我的问题:还有其他我没有想到的方法可以更快吗?

原因是我的实际数据是 150 万行和 110 列。因此,速度是一个主要问题。

我尝试了一些其他选项,但它们不起作用:
f_gsub_dt <- function(x,cols){
data.table(x)[, (cols) := gsub("^\\s+|\\s+$", "", .SD, perl = TRUE), .SDcols = cols]
}

f_set_dt <- function(x,cols){
for (j in cols)
{
set(x,x[[j]],j,gsub("^\\s+|\\s+$", "", j, perl = TRUE))
}
return(x)
}

最佳答案

使用 colwise来自 plyrstr_trim来自 stringr .

require(plyr)
require(stringr)
data[, odd_columns] <- colwise(str_trim)(data[, odd_columns])

关于r 使用 gsub、trim 等修剪 data.frame 或 data.table 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com