我有一个data.table
,其中包含11个变量和200,000+行。我正在尝试在此unique identifier
中找到key
(换言之,data.table
)。
我正在Stata中寻找isid之类的东西,它检查指定的变量是否唯一地标识观察结果。有人可以帮忙吗?
这不能完全回答OP问题[我还没有使用过data.table
],但是只有用户才能回答R
OP的问题。我的重点是解释isid
在Stata
上的实际工作方式。我使用来自R
数据库的数据(您需要为此数据安装optmatch
)。
library(optmatch)
data(nuclearplants)
sample<-nuclearplants
我只关注数据帧的子集,因为我的目标是仅解释isid
在做什么:
sample<-sample[,c(1,2,5,10)]
head(sample,5)
cost date cap cum.n
H 460.05 68.58 687 14
I 452.99 67.33 1065 1
A 443.22 67.33 1065 1
J 652.32 68.00 1065 12
B 642.23 68.00 1065 12
[现在,当我使用Stata
命令isid cost
时,它什么也不显示,这意味着对成本没有重复的观察(R
命令是unique(sample$cost)
或sample[duplicated(sample),]
[1] cost date cap cum.n
<0 rows> (or 0-length row.names).)
[但是,当我们使用isid date
,即日期变量时,Stata
报告它不是唯一的。或者,如果您运行duplicates date examples
,则Stata
将为您提供重复的观察值,如下所示:
. duplicates example date
Duplicates in terms of date
+-------------------------------+
| group: # e.g. obs date |
|-------------------------------|
| 1 2 27 67.25 |
| 2 2 2 67.33 |
| 3 3 29 67.83 |
| 4 2 4 68 |
| 5 5 8 68.42 |
|-------------------------------|
| 6 2 1 68.58 |
| 7 2 12 68.75 |
| 8 3 14 68.92 |
+-------------------------------+
为了解释输出,就是说观察67.25有两个重复的观察(如#
所示)。第一个观察值对应于第27行(它没有以67.25标识第二个重复项的行号)。 Group
给出每次重复的唯一标识符。
R command for the same is duplicated(sample$date).
duplicated(sample$date)
[1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE
[22] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
To identify the unique observation we can also use unique(sample$date) in R.
我们可以对两个变量isid cost date
执行相同的操作。同样,Stata
不能识别两个变量之间的重复观测值。在unique(sample[,c(1,2)]
中使用R
时也是如此。
同样,如果我对所有四个变量都运行isid
,则Stata
说它是唯一的(无警告)。
duplicates example cost date cap cum_n Duplicates in terms of cost date cap cum_n (0 observations are duplicates)
与
unique(sample)
中的R
相同。
结论
:因此,我认为,只要一个变量是唯一的(即它没有重复的观察结果),则包含唯一变量的变量组合就应该始终是唯一的。如果我错了,请纠正我。我认为您对data.table
和key
感到有些困惑。