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

问题描述:

我有一组包含多个变量的数据。其中一个变量 - 阶乘包含组的名称 - A,B,C等。其余变量是数字。R:以预定的出现频率和因子的自动更新级别删除变量(因子)的行

> 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 

对于进一步的统计计算欲从所述数据组包含该基团中的次数据帧的n个发现了一个特定的基团(例如,X),其条件行排除(例如,少于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 

加成

先生Akrun“带来的主意,用下面的代码:

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

这就是你需要的!我为此感谢他! 但是,rezltate因子水平保持不变。要纠正这种情况,我不得不使用该记录:

data1$Group = factor(data1$Group) 

肯定有现成的解决方案考虑到这种情况?

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(data1)),按'Group'分组,if行数大于2(.N >2),我们得到Data.table的子集(.SD)。

library(data.table) 
setDT(data1)[, if(.N >2) .SD, by = Group] 

或者与dplyr,由 '集团',filter有NROWS(n())组分组后大于2

library(dplyr) 
data1 %>% 
     group_by(Group) %>% 
     filter(n() > 2) 

或者使用base R,我们得到'群'的频率与table%in%中的subset保持一致。

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

啊,只是打败了我。不错的一个 –

+1

优秀的东西。其作品!谢谢! –