0

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

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

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

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

file2 <- file1[,f]

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

注意:这发生在括号()和斜杠上/

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

4

1 回答 1

1

就这样,问题仍然得到了回答。在阅读using as 时将选项设置check.names为:FALSEdata.frameread.table

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

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

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

于 2013-01-31T11:42:46.160 回答