2017-03-22 8 views
0

(与えられる)の全ての組み合わせによるデータフレームは私が要素の最初の2つの列所与データフレームのすべての部分集合を取得する必要があるだろうデータフレームdf サブセット因子

このよう
col1 col2 col3  col4 
"C1" "A" "M" somevalue1 
"C1" "A" "M" somevalue2 
"C2" "B" "N" somevalue3 
"C3" "B" "N" somevalue4 
"C1" "B" "Y" somevalue5 

を有していると仮定する。

今のように、私はその後、私はそれらの要因の一つ

subset(df, c("col1", "col2") == c("C1", "A")) 

によってデータフレームのサブセットをしようとしたしかし、それは動作しません

lapply(lapply(subset(df, select = c("col1", "col2")), factor), levels) 

と要因のすべての組み合わせを持って、または、私が考えることができる他の組み合わせを行います。

最終的な出力は、次のデータフレーム

を含むリストでなければなりません
$1 
col1 col2 col3 col4 
"C1" "A" "M" somevalue1 
"C1" "A" "M" somevalue2 

$2 
col1 col2 col3 col4 
"C2" "B" "M" somevalue3 

$3 
col1 col2 col3 col4 
"C1" "B" "Y" somevalue5 

$4 
col1 col2 col3 col4 
"C3" "B" "N" somevalue4 

[EDIT] subset(df, all(c("col1","col2") == c("C1", "A"))) も(0行が返さ)は動作しません

+0

'split(x、list(x $ col1、x $ col2)、drop = TRUE)'は私のために働きます。 – r2evans

答えて

0

あなたすなわち、mergeできるとsplit

dd <- merge(expand.grid(unique(df$col1), unique(df$col2)), df, by.x = c('Var1', 'Var2'), 
                   by.y = c('col1', 'col2')) 

#which gives 
# Var1 Var2 col3  col4 
#1 C1 A M somevalue1 
#2 C1 A M somevalue2 
#3 C1 B Y somevalue5 
#4 C2 B N somevalue3 
#5 C3 B N somevalue4 


split(dd, cumsum(!duplicated(dd[c(1:2)]))) 
#$`1` 
# Var1 Var2 col3  col4 
#1 C1 A M somevalue1 
#2 C1 A M somevalue2 

#$`2` 
# Var1 Var2 col3  col4 
#3 C1 B Y somevalue5 

#$`3` 
# Var1 Var2 col3  col4 
#4 C2 B N somevalue3 

#$`4` 
# Var1 Var2 col3  col4 
#5 C3 B N somevalue4 
関連する問題