我正在从数据框和矩阵迁移到数据表,但尚未找到从数据表中提取唯一行的解决方案。我想我遗漏了一些东西[,J]
符号,尽管我还没有在常见问题解答和简介小插图中找到答案。如何提取唯一的行,而不转换回数据框?
这是一个例子:
library(data.table)
set.seed(123)
a <- matrix(sample(2, 120, replace = TRUE), ncol = 3)
a <- as.data.frame(a)
b <- as.data.table(a)
# Confirm dimensionality
dim(a) # 40 3
dim(b) # 40 3
# Unique rows using all columns
dim(unique(a)) # 8 3
dim(unique(b)) # 34 3
# Unique rows using only a subset of columns
dim(unique(a[,c("V1","V2")])) # 4 2
dim(unique(b[,list(V1,V2)])) # 29 2
相关问题:这种行为是否是数据未排序的结果,就像 Unix 一样uniq
功能?
在 data.table v1.9.8 之前,默认行为unique.data.table
方法是使用键来确定应返回唯一组合的列。如果key
was NULL
(默认),人们会取回原始数据集(如在 OP 情况下)。
从 data.table 1.9.8+ 开始,unique.data.table
方法默认使用所有列,这与unique.data.frame
在基本 R 中。要让它使用键列,请显式传递by = key(DT)
into unique
(替换DT
在调用带有 data.table 名称的 key 时)。
因此,旧的行为会是这样的
library(data.table) v1.9.7-
set.seed(123)
a <- as.data.frame(matrix(sample(2, 120, replace = TRUE), ncol = 3))
b <- data.table(a, key = names(a))
## key(b)
## [1] "V1" "V2" "V3"
dim(unique(b))
## [1] 8 3
而对于 data.table v1.9.8+,只需
b <- data.table(a)
dim(unique(b))
## [1] 8 3
## or dim(unique(b, by = key(b)) # in case you have keys you want to use them
或者没有副本
setDT(a)
dim(unique(a))
## [1] 8 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)