删除 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", "")))
我有一个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", "")))