2017-03-29 10 views
0

データフレームに値を抽出し、それらをリストのリストの識別子に割り当てる必要があります。例:リストのリストの識別子に従ってデータフレームから値を抽出する

Inupt1:BR

$BR_1 
[1] "id5" "id6" "id7" "id8" "id9" "id10" 

$BR_2 
[1] "id13" "id14" "id15" "id16" "id17" "id18" "id19" 

入力2に従うように見えるリストの私のリストです:

Ids  Value 
id1  0 
id2  0 
id3  0 
id4  0 
id5  1 
id6  1 
id7  1 
id8  1 
id9  2 
id10  2 
id11  0 
id12  0 
id13  1 
id14  2 
id15  3 
id16  3 
id17  3 
id18  2 
id19  1 
id20  0 

所望の出力:DFは次のようになります私のデータフレームであります:

BR_1 (1,1,1,1,2,2) BR_2 (1,2,3,3,3,2,1) 

それから、これらの出力から、最大スコアが3でないもの(BR_1のみ)を取る必要があります。

申し訳ありませんが、私は用語では正しくありません。どんなアイデアでも大歓迎です。

+2

'lapply(BR、機能(ⅰ)DF $の値を[一致する(i、DF $ Ids)]) 'それを行う必要があります – Sotos

+0

ありがとうSotos、と私は3未満の値を持つBRだけを選択したいと言うことができますか? <3の値を持つものだけを制約するリストを作成することは可能ですか?この場合、BR_1のみを保持したいと考えています。再度、感謝します! p.s.私はこれらのリストの何百万も持っていると考えて... –

答えて

0

私は、lapply機能を使用してSotos'アイデアに同意します。

あなたは下の3以上のすべての値とのサブセットを作成することができます。

newDF = subset(DF, Value <3) 
lapply(BR, function(x) newDF[match(x, newDF$Ids),"Value"]) 

それとも、あなたの結果のリストを変更することができます

raw = lapply(BR, function(x) newDF[match(x, newDF$Ids),"Value"]) 
result = raw[sapply(raw, max) < 3] 
+0

第二の解決策が最も適切です。私はサプリーのおかげでチュートリアルに行きました。 –

関連する問題