2012-08-16 13 views
11

私は、N + 2列と言うデータフレームを持っています。最初はちょうど日付です(主に後でプロットするために使用されます)、2番目の変数は残りのN列に対する応答です。私は何かがあると思っています予測子のリストを持つデータフレームでRのlmを使う

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)

で任意の考えを失敗しましたか?

答えて

26

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]) 
+0

は、複数の列この方法を除外する方法はありますか? – soandos

+1

@soandos df [、 - c(3,6,7)]は、3番目、6番目、7番目の列を除外します。 – Dason

2

名前を除いて除外する列を指定する場合は、Dasonの回答の代替方法があります。 data[,-c("x1")]を使用しようと

df = data.frame(y = 1:10, x1 = runif(10), x2 = rnorm(10)) 
fit = lm(y ~ ., data = subset(df, select=-x1)) 

は「単項演算子に無効な引数」で失敗します。それはsubset()を使用し、select引数を指定することです。

それは除く複数の列に拡張することができます

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()を使用するつもりだった場合は別である。)

関連する問題