如果我对您的理解正确,那么您想从整个数据框中删除所有空格,我猜您使用的代码很适合删除列名中的空格。我认为您应该试试这个:
apply(myData,2,function(x)gsub('\\s+', '',x))
希望这行得通。
这将返回一个矩阵,但是,如果您想将其更改为数据框,请执行以下操作:
as.data.frame(apply(myData,2,function(x)gsub('\\s+', '',x)))
2020 年编辑:
将lapply 和trimws 函数与both=TRUE 一起使用可以删除前导和尾随空格,但不能删除其中的空格。由于OP 没有提供输入数据,因此我添加了一个虚拟示例来生成结果。
数据:
df <- data.frame(val = c(" abc"," kl m","dfsd "),val1 = c("klm ","gdfs","123"),num=1:3,num1=2:4,stringsAsFactors = FALSE)
#situation: 1(使用 Base R),当我们想要删除仅在开头和结尾而不是在字符串值内的空格时,我们可以使用 修剪
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 (Using Base R) ,当我们想要删除数据帧中字符列中每个位置的空格时(字符串内部以及前导和尾端)。
(这是使用 apply 提出的初始解决方案,请注意使用 apply 的解决方案似乎可以工作但会很慢,而且如果 OP 真的想删除前导/尾随,问题显然不是很清楚空白或数据中的每个空白)
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))
##情况: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]
输出来自situation1:
val val1 num num1
1: abc klm 1 2
2: kl m gdfs 2 3
3: dfsd 123 3 4
## 情况: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]
输出来自situation2:
val val1 num num1
1: abc klm 1 2
2: klm gdfs 2 3
3: dfsd 123 3 4
注意两种情况的输出之间的区别,在第 2 行:您可以看到,使用 trimws 我们可以删除前导和尾随空格,但使用正则表达式解决方案我们能够删除每个空格。
希望对你有帮助,谢谢