R中的线性回归与Sql服务器的数据

我想从MS Sql Server导入数据,并对R中的数据应用线性回归。但是我不确定我如何从SQL Server中操作数据,以便我可以进行回归。 我在sql server中的表看起来像这样,

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 ABC 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是我的自variables,Cubes是我的自variables。 在我的SQL表中的包只是一个参考。 我的Sql连接到DSN看起来像这样(完美工作),

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

随着回归我尝试(这是错误的),

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

我如何操纵从SQL服务器的数据,因为如果我在Excel中做到这一点?

尝试重塑或重塑包装:

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

我会使用reshape2包中的reshape2 。 请注意,对于NameSales不存在组合, dcast会导致NA 。 您需要手动将其更改为0

 res = dcast(df, Cubes ~ Name, value.var = 'Sales') res[is.na(res)] = 0 res Cubes ABC 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 

您可以通过使用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