2017-05-17 16 views
0

変数値に基づいてフィルタリングしようとしていますが、filter_、dots、およびquotesの複数の組み合わせを使用しても問題ありません。条件付きフィルタで変数dplyrを解決しました

例として、私は

runlist = c(1, 2, 3, 4, 5) 

とデータフレームのブーイング

run <- rep(seq(5), 3) 
edge1 <- sample(20, 15) 
edge2 <- sample(20, 15) 
weights <- sample(50, 15) 
boo <- as.data.frame(cbind(run, edge1, edge2, weights)) 

を持っていると私は

for (i in runlist) { 
    bop <- boo %>% filter(run == i) 
    str(boo) 
} 
として繰り返し のようなものに見えるかもしれブーイングという名前のデータフレームをフィルタリングします

私はループとRのために使用しないと聞いていると思う電子group_by(run)が、私はigraphにこのデータを送信し、さらにちょうどエッジと重みにデータセットをサブセットする必要があり、

bop <- boo %>% filter(run == i) %>% select(edge1, edge2, weights) 

に私はネットワークグラフを作成し、密度を見つけるだろうとこのように、グループ化変数を失うこととしています各実行の中心値。

bing <- graph.data.frame(bop) 

にはどうすれば正しい指標として解決するために、条件付きフィルタでiを得るのですか?

+0

使用する(これは、R for data science bookで詳細を見るリストの列です)(私はユニーク(ブーイング$実行で))'代わり – Nate

+0

@Nate日うわー、はい、それは動作します。 'runlist = unique(boo $ run)'と 'runlist'の索引付けの間にあなたの提案がうまくいく理由を私に説明できますか?そして、どのように@スペースを持っているハンドルを正しく@しますか? – zazizoma

答えて

2

私の答えは、「条件付きフィルタの変数を解決する」というものではありませんが、あなたがやりたいことをやる方がずっと簡単です。

大きなアイデアは、変数runに基づいてデータフレームを分割し、それらの各要素に関数をマップすることです。この関数はデータフレームを取り出し、igraphから吐き出します。

上記のコードを実行すると、の列にグラフのリストが格納されます。以下のために `

boo %>% 
    group_by(run) %>% 
    nest() %>% 
    mutate(graph = map(data, function(x) graph.data.frame(x %>% select(edge1, edge2, weights)))) %>% 
    mutate(density = map(graph, function(x) graph.density(x)) 
+0

intruiguing。 。 。私はそれを試して、私が求めている中心性と密度の統計を得ることができるかどうかを見ます。私はあなたがグラフ呼び出しに選択を挿入したのが好きです。 – zazizoma

+0

私はグラフのリスト列を持っていますが、グラフを個別に使用して濃度と中央統計を得ることはできませんでした。私はあなたの提案をミラーリングし、 'PDensities <- PGraphs %>%mutate(PDensity = map(data、function(x)graph.density(x)))'を試みましたが、グラフオブジェクトエラーメッセージではありません。 docsのリンクを送ってくれてありがとう、非常に興味深い、それはきちんとしたネットワークグラフに見えないほうきをお勧めします。たとえば、グラフごとにgraph.densityをどのように取得できますか?私はこのメソッドを使用したいと思います。 – zazizoma

+0

各グラフは、セルとしてデータフレームに格納されます。通常のように、 'my_dataframe [2、3]'で2行目と3列目のグラフを抽出することができます。おそらく、より効率的なマッピング操作があります。これは、抽出機能をリスト列の各セルにマップします。しかし、基本的な考え方は、リストの列から項目を任意の列として抽出できることです。 – Heisenberg

関連する問題