数据框的每列中的唯一值

时间:2013-11-04 05:01:48

标签: r dataframe

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

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

然后应该返回v1有3个不同的值,v2有2个。

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

9 个答案:

答案 0 :(得分:26)

或使用unique

rapply(DF,function(x)length(unique(x)))
v1 v2 
 3  2 

答案 1 :(得分:7)

sapply(DF, function(x) length(unique(x)))

答案 2 :(得分:5)

这是一种方法:

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

$v2
[1] 2

这基本上列出了每列的唯一值。使用length告诉您号码。删除length会显示实际的唯一值表。

答案 3 :(得分:4)

dplyr

DF %>% summarise_all(funs(n_distinct(.)))

答案 4 :(得分: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()

答案 5 :(得分:0)

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

length(unique(datasetname$variablename))

答案 6 :(得分:0)

dplyr (>=1.0.0 - june 2020)中:

DF %>% summarize_all(n_distinct)

  v1 v2
1  3  2

答案 7 :(得分:-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] a b   级别:a b

答案 8 :(得分:-2)

这将为第1列的DF数据帧提供唯一值。

unique(sc_data[,1])