无法使用dplyr重命名列

时间:2019-12-06 17:17:17

标签: r dplyr tidy

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

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

我收到以下错误:

  

重命名错误(。,age = Characteristics..age。,genotype = Characteristics..genotype。):对象'Characteristics..age。'找不到

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

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
  含量:N171-HD82Q wt

我想念什么?

2 个答案:

答案 0 :(得分:4)

一个选项将是反引号

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.)
  

plyr :: rename(。,genotype = Characteristics..genotype。)错误:
  未使用的参数(基因型=特征..基因型。)

答案 1 :(得分:3)

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

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