r使用gsub、trim等修剪data.frame或data.table中的列
我有一个关于删除data.frame或data.table中的前导空格的问题 我有可行的解决方案,但我正在努力加快我的代码 以下是一些示例数据:r使用gsub、trim等修剪data.frame或data.table中的列,r,replace,data.table,trim,gsub,R,Replace,Data.table,Trim,Gsub,我有一个关于删除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=F
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="")
我的问题是:有没有其他我没有想到的方法可以更快
原因是我的实际数据是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)
}
f_gsub_dt使用plyr中的colwise
和stru trim
中的stringr
require(plyr)
require(stringr)
data[, odd_columns] <- colwise(str_trim)(data[, odd_columns])
require(plyr)
要求(stringr)
数据[,奇数列]使用dplyr和基本函数,您可以一次修剪所有字符列
mutate_if(data, is.character, funs(trimws(.)))
这对你有用吗?我看过那篇文章,并从中使用了gsub方法。我试着在data.tables中做一些类似的事情。看看最近这个问题的答案:你应该使用set
。罗兰,在我问题的最后,我有一个示例,但无法让它起作用。“你能告诉我是怎么回事吗?”布拉德,好像罗兰的提示能引导你找到你想要的答案?为什么不自己贴出来作为答案呢?这么快吗?(OP寻找的主要东西)没有计时,但trim应该比正则表达式搜索快得多。并且避免使用多个子集data.frames和[]可以加快速度。
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)
}
require(plyr)
require(stringr)
data[, odd_columns] <- colwise(str_trim)(data[, odd_columns])
mutate_if(data, is.character, funs(trimws(.)))