我有一个包含几百个变量列(字符和数字)和大约5-6k行的数据框。
某些变量有许多唯一值,我想计算字符列中的唯一值,然后创建一个新数据框,只包含那些值重复超过X次的列(消除char列,只有唯一值或少数重复值。)
var1 | var 2 | var 3|
1. asf 5 al
2. asf 3 br
3. ab 2 aa
4. ar 1 bb
5. asf 10 cc
6. asf 18 ae
7. bf 20 sf
8. asf 21 pb
我已经创建了日期框架,其中只包含现在看起来像这样的字符列:
var1 | var 3 |
1. asf al
2. asf br
3. ab aa
4. ar bb
5. asf cc
6. asf ae
7. bf sf
8. asf pb
我现在需要能够获得每列重复值的计数,然后只选择那些超过重复值的特定计数的列,比如说上面的例子为5 - 所以我想创建一个数据框只有var1因为'asf'重复了5次。
如果结果是某些变量有很多NA,则需要另外注意。
答案 0 :(得分:1)
我们可以使用dplyr
执行此操作。首先,我们根据哪些因素选择数据(如果您的数据为is.character
而不是character
,则更改为factor
),然后查找最大频率大于或等于5:
library(dplyr)
dta %>% select(which(sapply(., is.factor))) %>%
select(which(sapply(., function(x) max(table(x)) >= 5)))
var1
1 asf
2 asf
3 ab
4 ar
5 asf
6 asf
7 bf
8 asf