我有以下代码:
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()
造成的。只想看看我在哪里错了。
答案 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