удаление пробелов в data.frame R - PullRequest
0 голосов
/ 18 июня 2020

У меня есть 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) сортировать только реальные числа c (V1, V3, V5)

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

2) вещественными числами c (V1, V3, V5) удалить пробелы, а затем изменить для V1, V3, V5 коэффициент на числовые c

str_remove_all(num_test," ")

Но я не понимаю, как мне вернуть 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

Спасибо!

1 Ответ

0 голосов
/ 18 июня 2020

Поскольку вы используете 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", "")))

Edit

Чтобы определить, какие столбцы не имеют буквенных данных, тогда

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