2016-08-18 9 views
1

私はいくつかの変数を含むデータのセットを持っています。変数の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 

Iデータから除外するグループをデータフレームに見出される条件の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'を 'Group'でグループ化した 'data.table'(setDT(data1))に変換し、if行数が2より大きい場合、Data.table(.SD)のサブセットを取得します。

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

またはdplyrと、 'グループ'、2

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

またはbase Rを使用するよりも大きいNROWS(n())を持っているfilterグループでグループ化した後、我々が得ます'グループ'の頻度はtable%in%subsetでグループを維持します。

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

ああ、ちょうど私にそれを打つ。ニースone –

+1

優れたもの。それは作品です!ありがとうございました! –

関連する問題