R:以预定的出现频率删除变量行(因子)并自动更新因子

时间:2016-08-18 02:11:04

标签: r dataframe

我有一组包含几个变量的数据。其中一个变量 - factorial包含组的名称 - A,B,C等。其余变量是数字。

 > data1
   Group Value
1      A    23
2      A    25
3      B     1
4      C    15
5      C    11
6      C    14
7      B     3
8      B     4
9      B     2
10     C    19

对于进一步的统计计算,我想从数据集中排除包含特定组(例如,X)的行,条件是该组在数据帧中找到n次(例如,少于2次) )。

之前我见过的材料主要涉及删除具有特定值的行,并且与数据帧中组(因子)的出现频率无关。也许我错了?遗憾!

删除"手册"中的特定行模式,我使用以下代码:

data1 <- as.data.frame(
  lapply(subset(data1, !Group=="A"),
         function(x) if(is.factor(x)) factor(x) else x
  )
)

我想自动执行此过程,并排除预定发生的所有级别因素(组):

> data1
  Group Value
1     B     1
2     C    15
3     C    11
4     C    14
5     B     3
6     B     4
7     B     2
8     C    19

加成

先生。 &#39; Akrun&#39;提出了使用以下代码的想法:

tbl <- table(data1$Group)
data1 <- subset(data1, Group %in% names(tbl)[tbl>2])

这就是你所需要的!我为此感谢他! 然而,rezltate因子水平保持不变。为了纠正这个问题,我被迫使用记录:

data1$Group = factor(data1$Group)

当然有考虑到这个案例的现成解决方案吗?

1 个答案:

答案 0 :(得分:2)

我们可以使用data.table。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(data1)),按&#39;分组&#39;,if行数大于2(.N >2),我们得到Data.table的子集({ {1}})。

.SD

或者使用library(data.table) setDT(data1)[, if(.N >2) .SD, by = Group] ,按照&#39;分组&#39;,dplyr将有正确(filter)的群组分组为大于2。

n()

或者使用library(dplyr) data1 %>% group_by(Group) %>% filter(n() > 2) ,我们会得到&#39; Group&#39;的频率。 <{1}}中的base Rtable %in%来保留群组。

subset