R 数据框中每列中的唯一值

R 数据框中每列中的唯一值,r,dataframe,R,Dataframe,我想获得数据帧中每列中唯一值的数量。 假设我有以下数据框: DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b")) DF这里有一种方法: > lapply(DF, function(x) length(table(x))) $v1 [1] 3 $v2 [1] 2 这基本上是将每列的唯一值制成表格。在上面使用length可以告诉您数字。删除长度将显示唯一值的实际表格。或使用唯一: rapply(DF,function(

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

DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))
DF这里有一种方法:

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

$v2
[1] 2

这基本上是将每列的唯一值制成表格。在上面使用
length
可以告诉您数字。删除
长度
将显示唯一值的实际表格。

或使用
唯一

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

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

我想这样一个函数会给你你想要的。这还显示了唯一的值,以及每个数据帧列中有多少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)
}

totaluniquevals这将在第1列的DF dataframe中为您提供唯一的值

unique(sc_data[,1])

为完整起见:自2015年9月19日CRAN版本1.9.6以来,
data.table
软件包包括帮助函数
uniqueN()
,这使我们不必编写

函数(x)长度(唯一(x))

调用
apply()
的同级之一时:


请注意,为了在此处使用
uniqueN()
,既不需要加载
data.table
包,也不需要将
DF
强制为class
data.table

这应该可以为每个变量获得唯一的值:

length(unique(datasetname$variablename))
dplyr(>=1.0.0-2020年6月)


OP问:我想得到数据帧中每列中唯一值的数量。您的答案只返回一列的唯一值,甚至不返回数字。所以,它没有回答这个问题。请考虑删除您的帖子。为什么使用全局赋值<代码> BTW,您的函数可以更简洁地改写为<代码>
unique(sc_data[,1])
sapply(DF, data.table::uniqueN)
v1 v2 
 3  2
length(unique(datasetname$variablename))
DF %>% summarize_all(n_distinct)

  v1 v2
1  3  2