gpt4 book ai didi

r - 从 R 中的数据表中提取唯一行

转载 作者:行者123 更新时间:2023-12-03 10:14:34 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Filtering out duplicated/non-unique rows in data.table

(5 个回答)


3年前关闭。




我正在从数据框和矩阵迁移到数据表,但还没有找到从数据表中提取唯一行的解决方案。我想我在 [,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的默认行为方法是使用键来确定应返回唯一组合的列。如果keyNULL (默认),可以取回原始数据集(如在 OP 情况下)。

截至数据表 1.9.8+,unique.data.table方法默认使用所有列,与 unique.data.frame 一致在基 R 中。要让它使用键列,明确传递 by = key(DT)进入 unique (用 data.table 的名称替换对 key 的调用中的 DT)。

因此,旧行为将类似于

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

关于r - 从 R 中的数据表中提取唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7562284/

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