0

我经常使用不是我自己创建的数据库。在数据库中,数据通常是编码的,例如男性 = 1,女性 = 2。我创建了很多动态报告,需要实际的级别名称,而不是变量级别的编码。我一直在手动重新编码变量的每个级别,但必须有一种方法以更自动化的方式完成此操作。

找出编码实际是什么的关键是在单独的表格中提供。当我通过 RODBC 将该数据导入 R 时,表格在列(例如)性别中包含 1 和 2。我试图找到一种方法,通过具有一些讨厌特征的查找表将它们转换为男性和女性。

在这种情况下,数据文件看起来像:

ID 性别
1 1
2 1
3 2
4 1

和查找表是这样的:

姓名 代码 描述
性别 1 男性
性别 2 女性
变量X 1 任何
变量X 2 任何
变量X 3 任何

因此,我想根据数据文件的变量名称和查找表中的名称列,使用两个表之间的链接将代码与 data$Gender 中找到的值进行匹配,从而在查找表中查找描述。我可以通过为每个变量运行来做到这一点:

data$Gender<-lookup(data$Gender, subset(lookuptable,Name=="Gender")) (查找是包'epicalc'中的一个函数)

'Name == "Gender"' 位的全部内容...如果变量名称和列 Name 中的字符串相同,则创建一个遍历所有变量名称的循环并不是一个大问题。但是,就我而言,名称列中的字符串名称通常与变量名称不匹配。那么当查找表是这样的时候我们该怎么办:

姓名 代码 描述
性别 1 男性
性别 2 女性
变量X 1 任何
变量X 2 任何
变量X 3 任何

在 Access 中,查找表和包含实际数据的表之间的链接是通过表设计中“查找”选项卡中的“行源”行。此行源是在变量级别指定的,因为不同的变量将需要不同的查找值(在我的情况下可以在 1 个查找表中找到)。

我想如果有一种方法可以将此 Row 源行导入到 R 中,我想我的问题将得到解决,它指定(在上面的示例中)在查找表中 Gender 实际上被称为 Sex。

如果您想知道,Row Source 行(可以为数据表中的每个变量指定)如下所示:

选择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-bit)
Epicalc_2.15.1.0
RODBC_1.3-6

4

1 回答 1

0

如果我正确理解您的问题,那么您面临的主要困难是您拥有包含多个变量编码的查找表,有时您必须“调整”变量名称以使其匹配。解决这两个问题的一种方法是在 Access 中创建保存的查询,这些查询可以充当每个变量的单独“查找(伪)表”。

例如,您可以在 Access 中创建一个名为“GenderLookup”的已保存查询,其 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
于 2013-04-04T21:17:29.933 回答