我有一个数据框,比如说 N+2 列。第一个只是日期(主要用于稍后绘制),第二个是一个变量,它对我想要计算的剩余 N 列的响应。我想一定有类似的东西
df = data.frame(y = 1:10, x1 = runif(10), x2 = rnorm(10))
fit = lm(y~df[,2:3],data=df)
这行不通。我也尝试过但失败了
fit = lm(y~sapply(colnames(df)[2:3],as.name),data=df)
有什么想法吗?
我有一个数据框,比如说 N+2 列。第一个只是日期(主要用于稍后绘制),第二个是一个变量,它对我想要计算的剩余 N 列的响应。我想一定有类似的东西
df = data.frame(y = 1:10, x1 = runif(10), x2 = rnorm(10))
fit = lm(y~df[,2:3],data=df)
这行不通。我也尝试过但失败了
fit = lm(y~sapply(colnames(df)[2:3],as.name),data=df)
有什么想法吗?
使用公式表示法y ~ .
指定您要对数据集中所有其他变量的 y 进行回归。
df = data.frame(y = 1:10, x1 = runif(10), x2 = rnorm(10))
# fits a model using x1 and x2
fit <- lm(y ~ ., data = df)
# Removes the column containing x1 so regression on x2 only
fit <- lm(y ~ ., data = df[, -2])
Dason 的答案有另一种选择,当您想按名称指定要排除的列时。它是使用subset()
, 并指定select
参数:
df = data.frame(y = 1:10, x1 = runif(10), x2 = rnorm(10))
fit = lm(y ~ ., data = subset(df, select=-x1))
尝试使用data[,-c("x1")]
失败,“一元运算符的参数无效”。
它可以扩展到排除多列:subset(df, select = -c(x1,x2))
您仍然可以使用数字列:
df = data.frame(y = 1:10, x1 = runif(10), x2 = rnorm(10))
fit = lm(y ~ ., data = subset(df, select = -2))
(这相当于subset(df, select=-x1)
因为x1
是第二列。)
当然,您也可以使用它来指定要包含的列。
df = data.frame(y = 1:10, x1 = runif(10), x2 = rnorm(10))
fit = lm(y ~ ., data = subset(df, select=c(y,x2)) )
lm(y ~ x2, df)
(是的,例如,如果您当时打算使用,这相当于但不同step()
。)
我对 R 相当陌生,但我找到了另一种方法来为数据框中的命名列执行此操作。假设您想使用除 column 之外的所有列运行回归x2
,那么您将编写:
df = data.frame(y = 1:10, x1 = runif(10), x2 = rnorm(10))
# Removes the column containing x2 so regression on x1 only
model <- lm(Y ~ . - x2, data = df)
# to remove more columns (assuming there were more columns in the data frame)
model <- lm(Y ~ . - x2 - x3 - x4, data = df)
其余的答案都很老了,所以也许这是一个新功能,但它很整洁!