29

我想获取数据框每一列中唯一值的数量。假设我有以下数据框:

DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))

那么它应该返回 v1 有 3 个不同的值,v2 有 2 个不同的值。

我尝试了唯一(DF),但它不起作用,因为每一行都不同。

4

9 回答 9

29

或使用unique

rapply(DF,function(x)length(unique(x)))
v1 v2 
 3  2 
于 2013-11-04T07:38:27.143 回答
8
sapply(DF, function(x) length(unique(x)))
于 2015-01-07T16:07:19.973 回答
6

dplyr

DF %>% summarise_all(funs(n_distinct(.)))
于 2017-03-24T05:48:04.547 回答
5

这是一种方法:

> lapply(DF, function(x) length(table(x)))
$v1
[1] 3

$v2
[1] 2

这基本上将每列的唯一值制成表格。使用lengthon 会告诉你这个数字。删除length将显示唯一值的实际表。

于 2013-11-04T05:07:35.183 回答
1

dplyr (>=1.0.0 - june 2020)

DF %>% summarize_all(n_distinct)

  v1 v2
1  3  2
于 2021-03-02T20:27:32.267 回答
0

这应该适用于为每个变量获取唯一值:

length(unique(datasetname$variablename))
于 2018-03-02T12:50:25.000 回答
0

为了完整起见:自 2015 年 9 月 19 日的 CRAN 版本 1.9.6 起,data.table包中包含帮助函数uniqueN(),使我们免于编写

function(x) length(unique(x))

当调用以下的兄弟姐妹之一时apply()

sapply(DF, data.table::uniqueN)
v1 v2 
 3  2

请注意,这里的data.table包既不需要加载也不需要DF强制到类data.table中才能使用uniqueN(), 。

于 2017-08-04T06:24:00.603 回答
-1

我认为这样的功能会给你你正在寻找的东西。除了每个数据框的列中有多少 NA 之外,这还显示了唯一值。只需插入您的数据框,您就可以开始了。

totaluniquevals <- function(df) {
  x <<- data.frame("Row Name"= numeric(0), "TotalUnique"=numeric(0), "IsNA"=numeric(0))
  result <- sapply(df, function(x) length(unique(x)))
  isnatotals <- sapply(df, function(x) sum(is.na(x)))

  #Now Create the Row names
  for (i in 1:length(colnames(df))) {
    x[i,1] <<- (names(result[i]))
    x[i,2] <<- result[[i]]
    x[i,3] <<- isnatotals[[i]]

  }
  return(x)
}

测试:

DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))
totaluniquevals(DF)
  Row.Name TotalUnique IsNA
1       v1           3    0
2       v2           2    0

然后,您可以在任何列上使用 unique 来查看特定的唯一值是什么。

唯一(DF$v2)[1] ab 级别:ab

于 2017-03-27T02:52:22.690 回答
-3

这将在第 1 列的 DF 数据框中为您提供唯一值。

unique(sc_data[,1])
于 2017-08-04T04:02:11.387 回答