我使用自己没有创建的数据库做了很多工作。在数据库中,数据经常被编码,例如, male = 1,female = 2.我创建了很多动态报告,这些报告需要实际的级别名称,而不是变量级别的编码。我一直在手动重新编码变量的每个级别,但必须有一种方法以更自动化的方式执行此操作。
找出编码实际是什么的关键是在单独的表格中提供。当我通过RODBC将数据导入R时,表格中包括1和2(例如)Gender。我试图找到一种方法,通过具有一些讨厌特征的查找表将它们转换为男性和女性。
在这种情况下,数据文件看起来像:
ID Gender
1 1
2 1
3 2
4 1
并且查找表会这样:
Name Code Description
Gender 1 Male
Gender 2 Female
VariableX 1 whatever
VariableX 2 whatever
VariableX 3 whatever
所以我想在查找表中查找说明,方法是将代码与data $ Gender中的值匹配,使用两个表之间的链接,基于数据文件的变量名和查找中的Name列-表。我可以通过运行每个变量来执行此操作:
data $性别< - 查询(数据$性别,子集(查询表,姓名==“性别”)) (查找是包'epicalc'中的函数)
关于这个'Name ==“Gender”'位...如果变量名和列Name中的字符串相同,那么制作一个遍历所有变量名的循环不是一个大问题。但是,就我而言,列Name中的字符串名称通常与变量的名称不匹配。那么查找表如下所示我们该怎么做:
Name Code Description
Sex 1 Male
Sex 2 Female
VariableX 1 whatever
VariableX 2 whatever
VariableX 3 whatever
在Access中,查找表和包含实际数据的表之间的链接是通过表设计中“查找”选项卡中的“行源”行。此行源在变量级别指定,因为不同的变量将需要不同的查找值(在我的情况下可以在1个查找表中找到)。
如果有一种方法可以将此Row源行导入R,我想我的问题将得到解决,R指定(在上面的示例中)Gender在查找表中实际上称为Sex。
如果您想知道,行源行(可以为数据表中的每个变量指定)将如下所示:
SELECT lookuptable.Code,lookuptable.Description FROM [lookuptable] WHERE(((lookuptable.Name)=“Sex”));
所以我想知道是否有人会看到解决问题的方法。我想从Access中的每个表导入每个变量的Row Source行会很方便(如果可能的话),但也许不是(我不知道)......
我希望自己清楚明白。我非常乐意添加内容以使事情更加清晰......
R版本2.15.2(2012-10-26)
平台:i386-w64-mingw32 / i386(32位)
epicalc_2.15.1.0
RODBC_1.3-6
答案 0 :(得分:0)
如果我正确理解你的问题,你面临的主要困难是你有包含多个变量编码的查找表,有时你必须“调整”变量名称才能匹配。解决这两个问题的一种方法是在Access中创建保存的查询,这些查询可以作为每个变量的单独“查找(伪)表”。
例如,您可以在名为“GenderLookup”的Access中创建一个保存的查询,其SQL代码为
SELECT [Code], [Description] AS Gender
FROM [MasterLookupTableName]
WHERE [Name]="Gender"
...或...
SELECT [Code], [Description] AS Gender
FROM [MasterLookupTableName]
WHERE [Name]="Sex"
...(取决于上面的例子实际上是这种情况),然后将该查询用作JOIN中的“查找表”,例如,
SELECT [DataTable].[ID], [GenderLookup].[Gender]
FROM [DataTable] INNER JOIN [GenderLookup]
ON [DataTable].[Gender] = [GenderLookup].[Code]
......会回来......
ID Gender
1 Male
2 Male
3 Female
4 Male