2017-01-28 7 views
2

私はいくつかのワークフロー(いくつかの簡単なフィルタリング)の後にinputListを私のカスタム関数にフィードして、データフレームresultDFを再作成する必要があります。私はrelistを使ってresultDFの構造をinputListと同じにしましたが、エラーが発生しました。 resultDFを再販する最も単純な方法はありますか?誰も私にこれを起こす方法を教えてもらえますか?何か案が?この簡単な質問を申し訳ありません。ここでデータリストを入力リストに再配置

は、リスト内の入力data.frameです:いくつかのワークフローの後

inputList <- list(
    bar=data.frame(from=c(8,18,33,53), 
        to=c(14,21,39,61), val=c(48,7,10,8)), 
    cat=data.frame(from=c(6,15,20,44), 
        to=c(10,17,34,51), val=c(54,21,14,12)), 
    foo=data.frame(from=c(11,43), to=c(36,49), val=c(49,13))) 

、私はこのdata.frameで終わる:私は同じ構造でresultDFを再出品する必要が

resultDF <- data.frame(
    from=c(53,8,6,15,11,44,43,44,43), 
    to=c(61,14,10,17,36,51,49,51,49), 
    val=c(8,48,54,21,49,12,13,12,13) 
) 

inputListです。 relitメソッドを使用しましたが、エラーが発生しました。

これは私の希望リストです:

desiredList <- list(
    bar=data.frame(from=c(8,53), to=c(14,61), val=c(48,8)), 
    cat=data.frame(from=c(6,15,44,44), to=c(10,17,51,51), val=c(54,21,12,12)), 
    foo=data.frame(from=c(11,43,43), to=c(36,49,49), val=c(49,13,13)) 
) 

どのように私はdesiredListを達成することができますか?

+0

これらのグループが「resultdf」からどのように形成されているか、どのように知っていますか?私は 'bar'、' cat'と 'foo'に何が入っているのか、どうやって分かっていますか? –

+0

@RonakShah最初に 'inputList'のために' unlist'してから、私のワークフローを進めて、最後に 'resultDF'を得ましたので、data.frameのリストとしてそれらを分割する必要があります。詳細なワークフローをすべて提供するのは時間がかかります。 – Dan

+0

おっと、おそらく私は明確ではありませんでした。私は 'resultDF'から' desiredList'へのステップについて尋ねています。 'bar'、' cat''と 'foo'には何が入っているのか、どうやって分かりますか? –

答えて

3

:)事前に感謝「はinputList」とをループ「はresultDF」内paste D行要素は%in%list要素があるかどうかをチェックし、サブセット化するために、そのインデックスを使用する我々はでき「resultDF」

lapply(inputList, function(x) resultDF[do.call(paste, resultDF) %in% do.call(paste, x),]) 

もう1つのオプションは、join、次にsplitです。私たちは、「GRP」列

を使用してデータセットを追加の列で list名、「resultDF」の「resultDF」 on列名を持つ joinを指定する「GRP」 data.tableに「inputList」を rbind、そして最後に split
library(data.table) 
dt <- rbindlist(inputList, idcol = "grp")[resultDF, on = names(resultDF)] 
split(dt[,-1, with = FALSE], dt$grp) 
+0

親愛なるakrun、あなたのソリューションをありがとう。これを行うための簡単なアプローチはありますか? 'lapply'を使うのは、inputListがかなり大きいと高価になるかもしれません。上記の解決策をさらに簡単にすることは可能ですか?どうもありがとうございました。 – Dan

+1

@Dan参加/分割方法で更新しました。より効率的でなければならない – akrun

関連する問題