2016-08-18 80 views
1

我有一組包含多個變量的數據。其中一個變量 - 階乘包含組的名稱 - 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) 

肯定有現成的解決方案考慮到這種情況?

回答

2

我們可以使用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

優秀的東西。其作品!謝謝! –