我需要从庞大的交易数据库中选择所有购物者的代表性样本,以便这些购物者的所有交易都包含在样本中。
表:
UserID TransId
1 1
1 2
1 3
2 1
2 2
3 1
4 1
4 2
4 3
4 4
50%的购物者样本:
UserID TransId
2 1
2 2
4 1
4 2
4 3
4 4
如何在R中编写SQL查询?该表位于MS SQL Server中。
答案 0 :(得分:2)
有许多不同的方法可以从R连接到SQL数据库。我个人最喜欢的是RODBC
包。
从RODBC
,您可以使用sqlQuery()
函数将SQL
查询传递给各种数据库,前提是它们接受ODBC连接。
以下代码将加载RODBC
库,分配名为con
的连接,并使用该连接从名为MyTable
的表中选择所有记录。
library(RODBC) ###Load library
con <- odbcConnect("POC") ###Assign database connection
sqlQuery(con, "select * from MyTable")
对于您当前的问题,我将使用SQLServer 2005及更高版本上提供的tablesample
函数。有很多方法可以做到这一点,但是下面通过内连接将表连接到自身的子查询(即50%的样本)。
查询看起来像这样:
select distinct
rnd.UserID, TransID
from MyTable
join (select UserID
from MyTable
tablesample (50 percent)) rnd
on rnd.UserID = MyTable.UserID
order by rnd.UserID
您可以通过以下sqlQuery()
传递:
sqlQuery(con,
"select distinct
rnd.UserID, TransID
from MyTable
join (select UserID
from MyTable
tablesample (50 percent)) rnd
on rnd.UserID = MyTable.UserID
order by rnd.UserID")
对于给定MyTable
的每个唯一TransID
,这应该会从UserID
获得50%的Userid伪随机样本。