18

N+2列のデータフレームがあります。1つ目は日付だけで(主に後でプロットするために使用されます)、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)

何かご意見は?

4

3 に答える 3

40

数式表記を使用する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]) 
于 2012-08-16T16:37:10.570 に答える
3

名前で除外する列を指定する場合は、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))

(これはが 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()

于 2016-06-17T10:32:32.657 に答える
1

私は 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)

残りの回答はかなり古いので、新しい機能かもしれませんが、かなりきれいです!

于 2019-06-10T19:09:01.883 に答える