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
。 请注意,对于Name
和Sales
不存在组合, 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