2014-01-08 71 views
0

我想從MS Sql服務器導入數據並對R中的數據應用線性迴歸。但我不知道如何我可以操縱從sql服務器的數據,以便我可以做迴歸。我在SQL Server表看起來像這樣,在R與Sql服務器的數據線性迴歸

Pack Cubes Name Sales 
1001 1.2  A  10 
1001 1.2  B  12 
1002 0.9  A  8 
1002 0.9  B  5 
1002 0.9  C  12 
1003 1.5  A  5 
1003 1.5  C  10 
1004 0.8  B  8 
1004 0.8  C  10 
1005 1.3  A  5 
1005 1.3  B  8 
1005 1.3  C  12 

如果我想在Excel中處理數據的迴歸模型,它會看起來像這樣,

Cubes A B C 
1.2 10 12 0 
0.9 8 5 12 
1.5 5 0 10 
0.8 0 8 10 
1.3 5 8 12 

的A,B,C是我的依賴變量和立方體我的自變量。在我的SQL表中的包只是一個參考。我的一個DSN SQL連接看起來是這樣的(這完美的作品),

library(RODBC) 
myconn <- odbcConnect("sqlserver") 
data <- sqlQuery(myconn,"select Cubes,Name,Sales from mytable") 

隨着我想(這是錯誤的)迴歸,

summary(data) 
reg<-lm(Cubes~Sales,data) 
summary(reg) 

如何操作從SQL Server的數據我會如果我在Excel中做到了?

回答

2

嘗試重塑或重塑包:

wide <- reshape(data, v.names = "Sales", idvar = "Cubes", 
      timevar = "Name", direction = "wide") 
+0

+1,雖然得到正是OP要求,則需要0.1 –

+0

由於更換'NA',重塑作品,我只是說寬[ is.na(wide)] = 0,這使得NAs等於0。 –

0

你可以直接在你需要使用如下的SQL格式從SQL Server中的數據:

SELECT Cubes, 
    SUM(CASE WHEN Name='A' then Sales else 0 END) A, 
    SUM(CASE WHEN Name='B' then Sales else 0 END) B, 
    SUM(CASE WHEN Name='C' then Sales else 0 END) C 
    FROM mytable 
    GROUP BY Cubes 
2

我會用dcast來自reshape2包。請注意,對於不存在的NameSales的組合,dcast會導致NA。您需要手動將其更改爲0

res = dcast(df, Cubes ~ Name, value.var = 'Sales') 
res[is.na(res)] = 0 
res 
    Cubes A B C 
1 0.8 0 8 10 
2 0.9 8 5 12 
3 1.2 10 12 0 
4 1.3 5 8 12 
5 1.5 5 0 10