2012-08-16 7 views
11

मेरे पास एन + 2 कॉलम के साथ डेटाफ्रेम है। पहली तारीखें हैं (मुख्य रूप से बाद में प्लॉट करने के लिए उपयोग की जाती हैं), दूसरा एक चर है जिसका शेष एन कॉलम की प्रतिक्रिया मैं गणना करना चाहता हूं। मुझे लगता है किभविष्यवाणियों की सूची के साथ डेटाफ्रेम पर आर के एलएम का उपयोग

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 को regress करना चाहते हैं।

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 डीएफ [, - सी (3,6,7)] तीसरे, छठे, और सातवें स्तंभों को बाहर कर देगा। – Dason

2

डेसन के उत्तर का एक विकल्प है, जब आप कॉलम निर्दिष्ट करना चाहते हैं, नाम से बाहर करने के लिए।

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

data[,-c("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 2 स्तंभ है बराबर है।)

स्वाभाविक रूप से आप में कॉलम निर्दिष्ट करने के लिए इसका उपयोग भी कर सकते हैं शामिल हैं।

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() का उपयोग किया जा रहे थे,।)

संबंधित मुद्दे