r - 如何通过 R 中的单个空格 gsub 数据框中的所有多个空格
问题描述
我想通过整个数据框中的单个空格替换所有多个空格。
IE
v1 <- c("Aluminium , Kunststoff", "Kunststoff , Stahl , Stoff")
v2 <- c("230 V", " 24 W")
df <- data.frame(v1, v2)
结果应该是:
v1 v2
1 Aluminium , Kunststoff 230 V
2 Kunststoff , Stahl , Stoff 24 W
我试过这个,但它不起作用:
data.frame(lapply(df, function(x) {
gsub(" {2,}", " ", x)
}))
如果逗号前没有空格,那当然是最佳选择。否则我会在下一步中做到这一点。
非常感谢
解决方案
如果您的数据框列是字符类型,并且您需要用单个空格替换任何一个或多个空白块,则可以使用
df[] <- lapply(df, function(x) gsub("\\s+", " ", x))
要删除逗号前的空格,并在逗号后保留一个空格,您可以使用
df[] <- lapply(df, function(x) gsub("\\s*(,)\\s*|\\s+", "\\1 ", x))
请参阅正则表达式演示。\s*(,)\s*|\s+
匹配零个或多个空格、逗号(捕获到第 1 组)和零个或多个空格或一个或多个空格,并用第 1 组 + 文字空格替换匹配项。
要删除逗号周围的空格,您可以使用
df[] <- lapply(df, function(x) gsub("\\s*(,)\\s*|(\\s)+", "\\1\\2", x))
注意:在最后一个示例中,用作多个空白块的替换字符的空间将是块中的最后一个空白字符。
请参阅正则表达式演示。正则表达式与上面的类似,但最后一个\s
被捕获到第 2 组中并用于所谓的“重复捕获组”,其中只有最后一个捕获的值保存在组中。
请参阅在线 R 演示:
v1 <- c("Aluminium , Kunststoff", "Kunststoff , Stahl , Stoff")
v2 <- c("230 V", " 24 W")
df <- data.frame(v1, v2)
lapply(df, function(x) gsub("\\s+", " ", x))
## => [1] "Aluminium , Kunststoff" "Kunststoff , Stahl , Stoff"
### [1] "230 V" " 24 W"
lapply(df, function(x) gsub("\\s*(,)\\s*|\\s+", "\\1 ", x))
## => [1] "Aluminium, Kunststoff" "Kunststoff, Stahl, Stoff"
### [1] "230 V" " 24 W"
lapply(df, function(x) gsub("\\s*(,)\\s*|(\\s)+", "\\1\\2", x))
## => [1] "Aluminium,Kunststoff" "Kunststoff,Stahl,Stoff"
### [1] "230 V" " 24 W"
推荐阅读
- angular - NullInjectorError:没有 t 的提供者!NullInjectorError: StaticInjectorError(ba)[Cw -> t]:
- r - 如何在 R 中使用循环和并行获得相同的结果?
- java - 浮动操作栏菜单出现在每个片段中
- azure-active-directory - 无法在 Azure AD Web App 上的重定向 URI 中设置 HTTP URI
- gstreamer-1.0 - gst-launch-1.0 - rtspsrc 音频/视频问题
- c - 使用关键参数时 main 之前的分段错误
- javascript - 数组的第一个元素是第一个最小值,第二个元素是第一个最大值,依此类推
- linux - 当二进制文件未使用 -g 编译时,如何获得 perf annotate 以显示源代码?
- javascript - Shopify 显示所选变体库存动态
- python - 如何使用 Python 单击 MS Access 上的按钮