我的目标是查找数据框中每列有多少唯一值,这是我想出的
### df is a data frame, 32 named columns, millions of rows
test1 <- sapply(df, function(x) length(unique(x)))
### I get a named integer from the above command
test2 <- data.frame(names(test1), test1)
### now I get a data frame, with row names
row.names(test2) <- NULL
### to get rid of the row names
test3 <- test2[order(test1),]
### finally I get a what I want
我的问题是,如何以较少的步骤进行此操作???
答案 0 :(得分:4)
基地R中的一次电话:
a,b,c,d
f,g,h,j
a,b
f,y,u
输出:
#using the same column names as in your example
test1 <- data.frame(names.test1 = colnames(mtcars),
test1=sapply(mtcars, function(x) length(unique(x))),
row.names=NULL)
这需要手动订购,但@BenBolker在评论中提及:
> test1
names.test1 test1
1 mpg 25
2 cyl 3
3 disp 27
4 hp 22
5 drat 22
6 wt 29
7 qsec 30
8 vs 2
9 am 2
10 gear 3
11 carb 6
但是,您可以使用test1 <- test1[order(test1$test1),])
执行有序的单行注册:
data.table
答案 1 :(得分:3)
我不确定这是不是你想要的。
请提供您的数据集示例(使用dput
)
想象一下,您想要计算数据mtcars
的唯一值的数量。
library(tidyr)
library(dplyr)
mtcars %>%
gather() %>%
group_by(key) %>%
summarise( ndist = n_distinct(value) ) %>%
arrange(desc(ndist))
这会给你
key ndist
1 qsec 30
2 wt 29
3 disp 27
4 mpg 25
5 hp 22
6 drat 22
7 carb 6
8 cyl 3
9 gear 3
10 vs 2
11 am 2
答案 2 :(得分:1)
这是你的意思吗?
test1 <- sort(sapply(df, function(x) length(unique(x))), decreasing = T)
data.frame(names(test1), test1, row.names = NULL)