【问题标题】:removing whitespaces in data.frame R删除 data.frame R 中的空格
【发布时间】:2020-10-08 20:07:37
【问题描述】:

我有一个 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

谢谢!

【问题讨论】:

  • (1) perl=TRUE 在这里是不必要的,你只是在放慢速度。 (2) (...) == F 应该是 ! (...)isFALSE(...)。 (3) 除了将as.numeric 添加到您的空白删除之外,这其中的哪些部分不起作用?是否只是将这些值重新分配回原始框架?

标签: r function dataframe removing-whitespace


【解决方案1】:

由于您使用的是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", "")))

【讨论】:

  • 这是个好主意!但我需要一个只改变实数的函数。我的意思是它的列不包含任何字母。因此,我编写了以下代码: num_test
  • 但可能是实数不在 V1、V3、V5 列中的数据集,例如在 V2、V7、V10 中。在这个练习中,我应该找到一种如何自动确定这些列的方法
  • 好的,叶卡捷琳娜,看看我的真实编辑(这次是我的回答,不是你的问题……抱歉)。
猜你喜欢
  • 1970-01-01
  • 2018-08-12
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2011-09-11
  • 2018-10-23
相关资源
最近更新 更多