I've been trying to remove the white space that I have in a data frame (using R). The data frame is large (>1gb) and has multiple columns that contains white space in every data entry.

有没有一种快速的方法可以消除整个数据帧中的空白?我一直在try 使用以下方法对前10行数据的子集执行此操作:

gsub( " ", "", mydata) 

这似乎不起作用,尽管R返回了一个我无法解释的输出.

str_replace( " ", "", mydata)

R返回47 warnings,没有删除空白.

erase_all(mydata, " ")

R返回一个错误,称为"错误:找不到函数"erase_all"

我非常感谢大家的帮助,因为我花了24小时试图解决这个问题.

谢谢

推荐答案

如果我理解正确,那么您希望删除整个数据帧中的所有空格,我猜您使用的代码有助于删除列名中的空格.我觉得你应该试试这个:

 apply(myData,2,function(x)gsub('\\s+', '',x))

希望这能奏效.

但是,这将返回一个矩阵,如果要将其更改为数据帧,请执行以下操作:

as.data.frame(apply(myData,2,function(x)gsub('\\s+', '',x)))

EDIT In 2020:

lapplytrimws函数与both=TRUE一起使用可以删除前导和尾随空格,但不能删除其中的空格.因为OP没有提供输入数据,所以我添加了一个虚拟示例来生成结果.

DATA:

df <- data.frame(val = c(" abc"," kl m","dfsd "),val1 = c("klm ","gdfs","123"),num=1:3,num1=2:4,stringsAsFactors = FALSE)

#situation: 1(使用基数R),当我们想要删除字符串值中的空格only at the leading and trailing ends NOT inside时,我们可以使用trimws

cols_to_be_rectified <- names(df)[vapply(df, is.character, logical(1))]
df[,cols_to_be_rectified] <- lapply(df[,cols_to_be_rectified], trimws)

# situation: 2(使用Base R),当我们想要删除字符列中数据帧中每个位置的空格时(inside of a string as well as at the leading and trailing ends).

(This was the initial solution proposed using apply, please note a solution using apply seems to work but would be very slow, also the with the question its apparently not very clear if OP really wanted to remove leading/trailing blank or every blank in the data)

cols_to_be_rectified <- names(df)[vapply(df, is.character, logical(1))]
df[,cols_to_be_rectified] <- lapply(df[,cols_to_be_rectified], function(x)gsub('\\s+','',x))

## situation: 1(使用data.table,仅删除前导空格和尾随空格)

library(data.table)
setDT(df)
cols_to_be_rectified <- names(df)[vapply(df, is.character, logical(1))]
df[,c(cols_to_be_rectified) := lapply(.SD, trimws), .SDcols = cols_to_be_rectified]

Outputsituation1:

    val val1 num num1
1:  abc  klm   1    2
2: kl m gdfs   2    3
3: dfsd  123   3    4

## situation: 2(使用data.table,删除每个内部空白以及前导/尾随空白)

cols_to_be_rectified <- names(df)[vapply(df, is.character, logical(1))]
df[,c(cols_to_be_rectified) := lapply(.SD, function(x)gsub('\\s+', '', x)), .SDcols = cols_to_be_rectified]

Outputsituation2:

    val val1 num num1
1:  abc  klm   1    2
2:  klm gdfs   2    3
3: dfsd  123   3    4

请注意第2行中两种情况的输出之间的差异:您可以看到,对于trimws,我们可以删除前导空格和尾随空格,但是对于正则表达式解决方案,我们可以删除每个空格.

我希望这有帮助,谢谢

R相关问答推荐

如何设置搜索栏来搜索整个Shiny应用程序页面?

通过R访问MoveApps API

单击 map 后,将坐标复制到剪贴板

使用R中相同值创建分组观测指标

获取列中值更改的行号

用相同方法得到不同函数的ROC最优截断值

标识R中多个列中缺少的唯一值

为什么当用osmdata映射R时会得到相邻状态?

如何从像glm这样的模型中提取系数表的相关性?

使用data.table::fcase()而不是dplyr::case_When()时保持值

派生程序包| ;无法检索';return()';的正文

Geom_arcbar()中出错:找不到函数";geom_arcbar";

为什么函数toTitleCase不能处理english(1),而toupper可以?

从线的交点创建面

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

R仅当存在列时才发生变异

随机将数据帧中特定列上的某些行设置为NA

为什么不能使用lApply在包装函数中调用子集

R将函数参数传递给ggploy

使用LAG和dplyr执行计算,以便按行和按组迭代