数据框中所有列的唯一值计数

时间:2016-06-23 06:26:36

标签: r dataframe count apply

我们有一个数据框如下:

raw<-data.frame(v1=c("A","B","C","D"),v2=c(NA,"B","C","A"),v3=c(NA,"A",NA,"D"),v4=c(NA,"D",NA,NA))

我需要以下格式的结果数据框:

result<-data.frame(v1=c("A","B","C","D"), v2=c(3,2,2,3))

使用以下代码获取一个特定列的计数:

count_raw<-sqldf("SELECT DISTINCT(v1) AS V1, COUNT(v1) AS count FROM raw GROUP BY v1")

这将返回单个列中唯一值的计数。

任何帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:12)

使用此

table(unlist(raw))

<强>输出

A B C D 
3 2 2 3 

对于数据框类型输出,请使用as.data.frame.table

对其进行换行
as.data.frame.table(table(unlist(raw)))

<强>输出

   Var1 Freq
1    A    3
2    B    2
3    C    2
4    D    3

答案 1 :(得分:3)

如果您想要总计数,

sapply(unique(raw[!is.na(raw)]), function(i) length(which(raw == i)))
#A B C D 
#3 2 2 3 

答案 2 :(得分:1)

我们可以将applyMARGIN = 1

一起使用
cbind(raw[1], v2=apply(raw, 1, function(x) length(unique(x[!is.na(x)]))))

如果是每列

sapply(raw, function(x) length(unique(x[!is.na(x)])))

如果我们需要基于所有列的计数,请转换为matrix并使用table

table(as.matrix(raw))
#  A B C D 
#  3 2 2 3 

答案 3 :(得分:1)

如果您提供的数据框中只包含字符值,则可以将其取消列表并使用unique或计算频率,使用count

> library(plyr)
> raw<-data.frame(v1=c("A","B","C","D"),v2=c(NA,"B","C","A"),v3=c(NA,"A",NA,"D"),v4=c(NA,"D",NA,NA))
> unique(unlist(raw))
[1] A    B    C    D    <NA>
Levels: A B C D
> count(unlist(raw))
     x freq
1    A    3
2    B    2
3    C    2
4    D    3
5 <NA>    6