清除R

时间:2016-06-03 15:12:39

标签: r

我的数据框中有几个标题,如下所示

... Page.Visits ba_rm..Total.Conversions Page.Visits ... aaa.d.s..Total.Conversions

我想摆脱中间部分 aaa.d.s 周围的所有内容, 因此新列名称仅为 aaa_d_s 。这里的规则是保持出现在......中间...(3点和2点)之间的任何东西

如何自动清理数据框中的所有列?

4 个答案:

答案 0 :(得分:1)

以下是一个例子:

require(dplyr)
data(iris)

existingDF <- iris
existingDF <- existingDF %>% select("Page Visits : aaa_d_s : Total Conversions" = Sepal.Length)
head(existingDF)


updatedDF <- existingDF %>% setNames(tolower(sub(".*: ([a-z_]+) :.*","\\1","Page Visits : aaa_d_s : Total Conversions")))
head(updatedDF)

输出:

> require(dplyr)
> data(iris)
> existingDF <- iris
> existingDF <- existingDF %>% select("Page Visits : aaa_d_s : Total Conversions" = Sepal.Length)

> head(existingDF)
  Page Visits : aaa_d_s : Total Conversions
1                                       5.1
2                                       4.9
3                                       4.7
4                                       4.6
5                                       5.0
6                                       5.4

> updatedDF <- existingDF %>% setNames(tolower(sub(".*: ([a-z_]+) :.*","\\1","Page Visits : aaa_d_s : Total Conversions")))

> head(updatedDF)
  aaa_d_s
1     5.1
2     4.9
3     4.7
4     4.6
5     5.0
6     5.4

我的建议是你看看正则表达式在R中是如何工作的。基础文档非常好。

了解更多详情

答案 1 :(得分:0)

您可以将sub与正确的正则表达式一起使用:

sub(".*: ([a-z_]+) :.*","\\1","Page Visits : aaa_d_s : Total Conversions")
[1] "aaa_d_s"

答案 2 :(得分:0)

我们可以使用str_extract

library(stringr)
str_extract(str1, "(?<=:\\s)[^ ]+")
#[1] "aaa_d_s"

要更新列名,我们可以使用

names(existingDF) <- str_extract(names(existingDF), "(?<=:\\s)[^ ]+")
names(existingDF)
#[1] "aaa_d_s"

数据

str1 <- "Page Visits : aaa_d_s : Total Conversions"

答案 3 :(得分:0)

我找到了一个使用gsub的解决方案:

我删除了前缀

names(raw) <- gsub("\\Page.Visits...", "", names(raw))

并删除结尾部分

names(raw) <- gsub("\\..Total.Conversions", "", names(raw))