R从DF中选择列,给出重复计数

时间:2015-08-31 20:44:37

标签: r

我有一个包含几百个变量列(字符和数字)和大约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,则需要另外注意。

1 个答案:

答案 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