r - 删除 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)在实数(V1、V3、V5)中删除空格,然后将 V1、V3、V5 因子更改为数字
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
谢谢!
解决方案
由于您使用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", "")))
推荐阅读
- r - 我想限制 R 中 x 和 y 轴的显示
- kotlin - 按连续元素拆分/分组收藏
- mysql - 如何将 pg_dump 文件恢复到 mysql 数据库中?
- ruby-on-rails - 需要使用 docker 设置 Ruby on Rails 应用程序堆栈
- c# - 通过 log4net 的 Quartz.net 调度程序日志没有进入正确的记录器文件
- django - 保存嵌套的 Django 序列化程序
- swift - 显示空的 tableview 文本和图像的问题
- javascript - 角度模板参考抛出错误
- amazon-s3 - 使用 cloudfront 从私有 S3 文件夹下载文件
- google-chrome-extension - 在 chrome 扩展中出现错误:与 http://*******.com/ 上的跨站点资源关联的 cookie 设置为没有“SameSite”属性