gpt4 book ai didi

R编程: Identifying Composite Keys

转载 作者:行者123 更新时间:2023-12-02 01:34:21 25 4
gpt4 key购买 nike

原始问题:我的工作要求我经常分析大型数据集上的数据 - 基数、关系、唯一性等。 。 。 .,并经常这样做。目的是使用 R 分析数据并在 R Markdown 中创建报告。

我的问题是:1.将数据加载到R数据帧中2. 如何识别数据库术语中所谓的复合主键?

例如,我有一个包含 75,000 条记录的表。我执行 rapply 来获取每个变量的唯一计数。但是,除非其中一个变量的计数为 75,000,否则就不存在单主键。换句话说,没有一个变量可以用来唯一地识别单个观察结果。

然后,目标就变成寻找唯一标识每个观察值(行)的变量(列)组合。这可以是 160 个变量数据框/表中的两个、三个或四个变量/列。当然,如果没有唯一标识每一行或观察的键组合,则总是可能存在重复项。

我已经成功地完成了一个“for”循环(丑陋),但我认为有一些优雅、更有效的方法可以做到这一点。

如何找到哪些变量构成复合主键?

修改后的问题:

    ############### Data1 - 2 columns - one PK
data1 <- data.frame(rep_len(1, length.out = 10))
data1$PK <- rep_len(1:10, length.out = 10)

names(data1) <- c('DupData', 'PK')
rownames(data1) <- NULL

rapply(data1,function(x)length(unique(x)), how = 'unlist')
DupData PK
1 10

length(unique(data1$PK))
[1] 10

接下来是一个包含 3 列的数据框,但需要两列才能进行唯一的观察:

############### Data2 - 3 columns - Two column composite PK
data2 <- data1
data2$PK <- rep_len(1:2, length.out = 10)
data2$PK2 <- rep_len(2:6, length.out = 10)
rapply(data2,function(x)length(unique(x)), how = 'unlist')
DupData PK PK2
1 2 5

length(unique(data2$DupData))
[1] 1
length(unique(data2$PK))
[1] 2
length(unique(data2$PK2))
[1] 5
nrow(unique(data2[,c(1,2)], nmax = 3))
[1] 2
nrow(unique(data2[,c(1,3)], nmax = 3))
[1] 5
nrow(unique(data2[,c(2,3)], nmax = 3))
[1] 10

最后,有一个包含 4 列/变量的数据框,需要三列才能进行唯一的观察:

############### Data3 - 4 columns - Three column composite PK
data3 <- data1
data3$PK <- c(0,0,0,0,0,0,0,0,1,1)
data3$PK2 <- c(0,0,1,1,1,2,2,2,0,0)
data3$PK3 <- c(1,2,0,1,2,0,1,2,0,1)
rapply(data3,function(x)length(unique(x)), how = 'unlist')
DupData PK PK2 PK3
1 2 3 3

length(unique(data3$DupData))
[1] 1
length(unique(data3$PK))
[1] 2
length(unique(data3$PK2))
[1] 3
length(unique(data3$PK3))
[1] 3
nrow(unique(data3[,c(1,2)], nmax = 4))
[1] 2
nrow(unique(data3[,c(1,3)], nmax = 4))
[1] 3
nrow(unique(data3[,c(1,4)], nmax = 4))
[1] 3
nrow(unique(data3[,c(1:4)], nmax = 4))
[1] 10
nrow(unique(data3[,c(2,3)], nmax = 4))
[1] 4
nrow(unique(data3[,c(2,4)], nmax = 4))
[1] 5
nrow(unique(data3[,c(3,4)], nmax = 4))
[1] 9
nrow(unique(data3[,c(2:4)], nmax = 4))
[1] 10

问题是:是否有一种方法可以以简单、 Eloquent 方式确定哪些列组合起来构成记录的唯一实例,而无需编写无限的 for 循环?

如果没有,在 R 中编写 for 循环的最佳方法是什么,它会告诉您组合的列的每个组合都有一个唯一计数,该计数等于整个数据帧的计数?

希望这比泥泞更清晰,这对某人来说是一个简单的问题。

感谢您的帮助!

最佳答案

不幸的是,没有。有多种方法可以识别主键,无论是单键还是复合键。但是,如果有 10 列,理论上,创建唯一键可能需要 10 列。这意味着您必须检查第一列到第 10 列的唯一性,然后是第 1 列和第 2 列,然后是第 1 列和第 3 列,最后是第 1 列和第 4 列。 。 。等等。我认为这可以归结为检查n!组合。因此,如果您有 10 列,您可能需要检查 3,628,800 个组合的唯一性。实际上,2-4 列通常是复合键中键的最大数量。不过,这仍然可以通过大量检查来验证。这只是我的意见,但归根结底是建模者了解数据并验证假设。如果您找到更好的答案,请告诉我们,

关于R编程: Identifying Composite Keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com