我使用fread导入非常大的.CSV文件。有些列在我需要删除的文本后面有空格。这会花费太多时间(小时)。
以下代码可以工作,但是system.time上的命令非常慢(在我的计算机上大约为12秒,而实际文件要大得多)。
library(data.table)
library(stringr)
# Create example-data
df.1 <- rbind(c("Text1 ", 1, 2), c("Text2 ", 3, 4), c("Text99 ", 5, 6))
colnames(df.1) <- c("Tx", "Nr1", "Nr2")
dt.1 <- data.table(df.1)
for (i in 1:15) {
dt.1 <- rbind(dt.1, dt.1)
}
# Trim the "Tx"-column
dt.1[, rowid := 1:nrow(dt.1)]
setkey(dt.1, rowid)
system.time( dt.1[, Tx2 :={ str_trim(Tx) }, by=rowid] )
dt.1[, rowid:=NULL]
dt.1[, Tx:=NULL]
setnames(dt.1, "Tx2", "Tx")
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来修剪data.tables中的空格?
您只能对“Tx”的唯一值进行操作(假设您实际上有一些重复,如您的示例所示):
dt.1[, Tx2:=str_trim(Tx), by=1:nrow(dt.1)]
dt.1[, Tx3:=str_trim(Tx), by=Tx]
dt.1[, all.equal(Tx2,Tx3)] # TRUE
Run Code Online (Sandbox Code Playgroud)
使用@DWin 的答案中的gsub代替也会加快速度,无论您是否有重复的“Tx”值。str_trim
编辑:正如@DWin 指出的那样,没有理由一开始就按行进行,因此str_trim不需要矢量化。所以,我改变了我的答案。
| 归档时间: |
|
| 查看次数: |
3083 次 |
| 最近记录: |