删除 data.frame R 中的空格

removing whitespaces in data.frame R

我有一个data.frame

test_data <- read.csv("https://stepik.org/media/attachments/course/724/test_data_01.csv", 
                       stringsAsFactors = FALSE)

这个 data.frame 看起来像这样:

 V1      V2       V3      V4       V5
1 -2. 5935    II 2   0.4984 ST 123E -2.154 4
2  -0.2888 ST 123E   1.5636 ST 123E   0.1053
3 -0.828 6 ST 123E -0.9 791  HP 129 -0. 4989
4  -0. 322 ST 123E  -0.3013  HP 129  -0.4032
5  -0.5588 ST 123E   1.2694  HP 129  0.703 9

我的目标: 1) 仅对实数进行排序 (V1, V3, V5)

num_test<-test_data[sapply(test_data, function(x) grepl("[A-Za-z]", x, perl = T))==F]

2) in real numeric(V1, V3, V5) 删除空格然后将 V1, V3, V5 因子更改为 numeric

str_remove_all(num_test," ")

但我不明白我如何 return data.frame 进行更改。它应该是这样的:

V1      V2      V3      V4      V5
1 -2.5935    II 2  0.4984 ST 123E -2.1544
2 -0.2888 ST 123E  1.5636 ST 123E  0.1053
3 -0.8286 ST 123E -0.9791  HP 129 -0.4989
4 -0.3220 ST 123E -0.3013  HP 129 -0.4032
5 -0.5588 ST 123E  1.2694  HP 129  0.7039

谢谢!

由于您使用的是 str_replace_all,我推断是 tidyverse。试试这个:

library(dplyr)
test_data %>%
  mutate_at(vars(V1, V3, V5), ~ as.numeric(gsub("\s", "", .)))
#        V1      V2      V3      V4      V5
# 1 -2.5935    II 2  0.4984 ST 123E -2.1544
# 2 -0.2888 ST 123E  1.5636 ST 123E  0.1053
# 3 -0.8286 ST 123E -0.9791  HP 129 -0.4989
# 4 -0.3220 ST 123E -0.3013  HP 129 -0.4032
# 5 -0.5588 ST 123E  1.2694  HP 129  0.7039

因为 gsub 本身就可以正常工作。如果你喜欢stringr,那么

library(stringr)
test_data %>%
  mutate_at(vars(V1, V3, V5), ~ as.numeric(str_replace_all(., "\s", "")))

编辑

判断哪些列没有类字母数据,则

test_data %>%
  mutate_if(~ !any(grepl("[A-Za-z]", .)),
            ~ as.numeric(str_replace_all(., "\s", "")))