管道功能中的dplyr突变姓氏

时间:2018-10-04 14:28:55

标签: r dplyr

我有以下代码:

library(dplyr)

df <- data %>%
  left_join(., panel_info, by = "PANID") %>%
  left_join(., prod_0106, by = "UPC") %>%
  left_join(., prod_0106sz, by = "UPC") %>%
  left_join(., trips, by = "PANID") %>%
  mutate(colnames(.) = gsub(" ", "", colnames(.)))

除最后一行外,所有内容均有效。 df数据框以前未创建。因此,我使用管道功能尝试将所有数据连接在一起,最后删除连接数据的列名中的所有空格。

但是,发生以下错误;

Error in mutate_impl(.data, dots) : 
  Column `gsub(" ", "", colnames(.))` must be length 20056 (the number of rows) or one, not 106

我认为这是由于代码(.)部分中的mutate()造成的。只想看看我在哪里错了。

2 个答案:

答案 0 :(得分:2)

您还可以通过管道连接到colnames来设置dplyr管道中的`colnames<-()`,这是您执行colnames(df) <- c('a', 'b', 'c')时调用的函数的通用形式:

iris %>%
    `colnames<-`(gsub('Length', 'LENGTH', names(.))) %>%
    head

  Sepal.LENGTH Sepal.Width Petal.LENGTH Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

答案 1 :(得分:1)

从评论中可以看到很多选择。我认为一对夫妇非常适合链接:

library(dplyr)

> iris %>% rename_all(~gsub('Length', 'LENGTH', .x)) %>% head()

  Sepal.LENGTH Sepal.Width Petal.LENGTH Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

> iris %>% setNames(gsub('Length', 'LENGTH', names(.))) %>% head()

  Sepal.LENGTH Sepal.Width Petal.LENGTH Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa