【问题标题】:R changing column names containing plus or bracketsR更改包含加号或括号的列名
【发布时间】:2013-01-15 11:49:21
【问题描述】:

我将data.frame 的列名保存到R 的变量中。我的一些列名称包含一个加号+R 在将 + 保存到变量时将其更改为 .。我想保留+,以便在需要时可以再次自动选择这些列。

这是我用来将列名保存到变量中的命令:

for (u in 1:50) {
    k <- colnames[u]
    f <- append(f,k)
}
## f is defined previously in my program

这是我用来再次获取我需要的名称的命令:

file2 <- file1[,f]

示例: column1+ 在变量f 中被命名为column1.

注意:这发生在括号() 以及斜线/

有什么想法可以解决这个问题吗?

【问题讨论】:

  • 使用check.names = FALSE选项创建data.frame(或使用read.table
  • 这不是评论...这就是答案!谢谢你:)

标签: r dataframe


【解决方案1】:

所以问题仍然得到回答。将选项check.names 设置为FALSE,同时使用read.table 读取data.frame

read.table(file, check.names = FALSE)

注意:正如@Roland 在 cmets 下所说,最好保持列名干净而不是使用此参数。您还可能会遇到某些功能会自动将名称转换回来的情况。例如,

df <- data.frame('x+y' = 1:4, 'a+b' = 5:8, check.names = FALSE)
> df
#   x+y a+b
# 1   1   5
# 2   2   6
# 3   3   7
# 4   4   8

# Now adding a 3rd column, using `transform`
transform(df, c=9:12)
#   x.y a.b  c  # note that it reverts back
# 1   1   5  9
# 2   2   6 10
# 3   3   7 11
# 4   4   8 12

transform(df, c=9:12, check.names = FALSE)
#   x+y a+b
# 1   1   5
# 2   2   6
# 3   3   7
# 4   4   8

您必须了解所有具有check.names=FALSE 的函数并记住正确使用它们。这至少是我能想到的一个问题。最好让列没有冲突。

在列名中包含+等运算符也会干扰公式模型接口:

dat <- data.frame('a+x'=c(1,2,3,4),b=c(2,4,6,8),check.names=FALSE)
lm(dat$b~dat$a+x)
Error in eval(expr, envir, enclos) : object 'x' not found

您需要使用lm(dat$b~dat[,'a+x'])

【讨论】:

  • 您应该在此建议中加入警告。通常最好对列名进行清理。
  • 请问为什么保持它们清洁比使用它们更好?有成千上万的列,我认为我无法全部编辑它们。谢谢
  • 感谢您的回答,我会密切关注我正在使用的功能,因为我拥有的列类似于 Column1+ 和 Column1,因此更改任何内容都不容易。伙计们干杯
  • 如果你没问题,你可以把所有东西都改成names(df) &lt;- paste0("V", 1:ncol(df))
  • 我将生成的列名输入另一个程序,所以我希望它们完全相同,它们甚至区分大小写。我想我会继续在步骤之间扫描数据框,以确保一切正常。再次...感谢您的协助!
猜你喜欢
  • 2019-06-24
  • 2013-08-14
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 2021-10-12
  • 2013-04-14
相关资源
最近更新 更多