无法使用 dplyr 重命名列

Can't rename columns with dplyr

我正在尝试将数据框中的列从 Characteristics..genotype. 重命名为 genotype 以及从 Characteristics..age. 重命名为 age:

pData(raw_data) %>%
  rename(
    age = Characteristics..age.,
    genotype = Characteristics..genotype.
  )

我收到以下错误:

Error in rename(., age = Characteristics..age., genotype = Characteristics..genotype.) : object 'Characteristics..age.' not found

这没有意义,因为数据框中存在列:

pData(raw_data)$Characteristics..genotype.

上面的输出:

[1] N171-HD82Q N171-HD82Q N171-HD82Q wt wt wt N171-HD82Q N171-HD82Q N171-HD82Q wt wt
[12] wt N171-HD82Q N171-HD82Q N171-HD82Q wt wt wt
Levels: N171-HD82Q wt

我错过了什么?

一个选项是反引号

library(dplyr)
 pData(raw_data) %>%
  rename(
    age = `Characteristics..age.`,
   genotype = `Characteristics..genotype.`
  )   

或者根据错误(用plyr::rename转载),最好用::指定加载的包,避免被屏蔽

pData(raw_data) %>%
  dplyr::rename(
    age = Characteristics..age.,
   genotype = Characteristics..genotype.
  )   

但是,在 dplyr_0.8.3 上进行测试时,它在没有反引号的情况下工作正常

data(mtcars)
raw_data <- head(mtcars)
names(raw_data)[1] <- "Characteristics..genotype."
raw_data %>%
      dplyr::rename(genotype = Characteristics..genotype.)
#             genotype cyl disp  hp drat    wt  qsec vs am gear carb
# ...

问题是 plyr 也包含相同的 rename 函数,因此如果包也被加载,它可能会掩盖 dplyr::rename

raw_data %>% 
    plyr::rename(genotype = Characteristics..genotype.)

Error in plyr::rename(., genotype = Characteristics..genotype.) :
unused argument (genotype = Characteristics..genotype.)

您可以使用 rename_all 并使用函数进行重命名,例如使用 stringr::str_remove_all 删除开头的 "Characteristics.." 或结尾的 "." 的所有实例(使用 \ 转义的句点)。

library(tidyverse) # dplyr and stringr
df %>% 
  rename_all(str_remove_all, '^Characteristics\.\.|\.$')