【问题标题】:gsub not working on colnames?gsub 不适用于列名?
【发布时间】:2017-04-14 06:37:27
【问题描述】:

我有一个名为 df 的数据框,其列名格式如下:

  "A Agarwal"                   "A Agrawal"                   "A Balachandran"        
"A.Brush"                     "A.Casavant"                  "A.Chakrabarti"           

它们是名字的首字母和姓氏。但是,其中一些以空格分隔,而另一些则以句点分隔。我需要用句号替换句号。(第一列叫author.ID,我从下面的代码中排除了)

我已经尝试了以下代码,但生成的列名仍然没有改变。

  colnames(df[, -1]) = gsub("\\s", "\\.", colnames(df[, -1]))
  colnames(df[, -1]) = gsub(" ", ".", colnames(df[, -1]))

我做错了什么?

谢谢。

【问题讨论】:

  • 试试colnames(df) <- sub("\\s+", ".", colnames(df))
  • 太棒了。除了gsub之外,两者之间有什么区别? + 是什么意思?
  • 或使用fixed = TRUE:gsub(" ", ".", "A Agarwal", fixed = TRUE)
  • 我认为如果使用 \s\s+fixed=TRUE 带空格并不重要 - 都可以调整(如果您只需要将 1 个文字空格替换为一个点,是的,应该使用sub(" ", ".", colnames(df), fixed=TRUE))。 [,-1] 表示您获得除第一列之外的所有行和所有列

标签: r regex gsub


【解决方案1】:

请注意,df[, -1] 可以获取除第一列之外的所有行和列(请参阅this reference)。要修改列names,您应该使用colnames(df)

要将第一个文字空格替换为点,请使用

colnames(df) <- sub(" ", ".", colnames(df), fixed=TRUE)

如果可以有多个空格,请使用正则表达式:

colnames(df) <- sub("\\s+", ".", colnames(df))

如果您需要删除列名中带有单个点的所有空格序列,请使用gsub

colnames(df) <- gsub("\\s+", ".", colnames(df))

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多