数据框中所有列的唯一值计数
Count of unique values across all columns in a data frame
我们有如下数据框:
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")
这将 return 计算单个列中的唯一值。
非常感谢任何帮助。
我们可以使用 apply
和 MARGIN = 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
如果您的数据框中只有您提供的字符值,您可以取消列出它并使用 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
如果你想要总数,
sapply(unique(raw[!is.na(raw)]), function(i) length(which(raw == i)))
#A B C D
#3 2 2 3
使用这个
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
我们有如下数据框:
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")
这将 return 计算单个列中的唯一值。
非常感谢任何帮助。
我们可以使用 apply
和 MARGIN = 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
如果您的数据框中只有您提供的字符值,您可以取消列出它并使用 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
如果你想要总数,
sapply(unique(raw[!is.na(raw)]), function(i) length(which(raw == i)))
#A B C D
#3 2 2 3
使用这个
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