0

这可能是一个非常简单的问题,但我似乎无法克服它。有 X100.4、X100.-4、X100.-5 等列名。我正在尝试进行线性回归,但是当我这样做时出现错误

lm<-lm(X986~X241+X243+X280+X282+X987+X143.2+X239.0+X491.61+X350.-4,data=train)
Error in terms.formula(formula, data = data) : 
  invalid model formula in ExtractVars

没有变量 X350.-4 它工作正常,所以我假设这是问题所在。我尝试做“X350.-4”和“X350.-4”,但这产生了同样的错误。我也尝试为所有变量做“”,但这也不起作用。

4

2 回答 2

4

您可以使用反引号:

DF <- data.frame(x=1:10, y=rnorm(10))
names(DF)[1] <- "x.-1"

lm(y~`x.-1`, data=DF)

但最好对名称进行消毒:

names(DF) <- make.names(names(DF))
于 2013-12-04T13:03:17.947 回答
1

问题在于减号(“-”),而不是小数。因此,如果您真的需要这些列名,请使用@Roland 的方法,或者将减号替换为其他内容:

colnames(data)=gsub(pattern="-",x=colnames(data),replacement="_")

使用make.names(...)有点冒险,因为它会产生冲突(具有相同名称的多个列)。考虑:

DF <- data.frame(y=1:3,x.1=6:8,z=11:13)
colnames(DF)[3] <- "x-1"
DF
  y x.1 x-1
1 1   6  11
2 2   7  12
3 3   8  13

names(DF) <- make.names(names(DF))
DF
  y x.1 x.1
1 1   6  11
2 2   7  12
3 3   8  13

您可能需要使用:

names(DF) <- make.names(names(DF),unique=T)
DF
  y x.1 x.1.1
1 1   6    11
2 2   7    12
3 3   8    13
于 2013-12-04T15:03:39.880 回答