Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r使用gsub、trim等修剪data.frame或data.table中的列_R_Replace_Data.table_Trim_Gsub - Fatal编程技术网

r使用gsub、trim等修剪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

我有一个关于删除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="")
我的问题是:有没有其他我没有想到的方法可以更快

原因是我的实际数据是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(.)))