2017-11-05 12 views
-2

私は10個のサブリストのリストを持っています。各サブリストの長さはそれぞれ異なります。リストの要素を合計するループ

List 
[[1]] 
length number of petals 
0.89  2 
0.96  1 
1.03  3 
[[2]] 
length number of petals 
0.70  0 
0.96  3 

私が条件で、1つのリスト内のすべての10のサブリストをマージしたい:10サブリストの長さの同じ値(この例では花びらのその数を追加することがあればI 0.96で終了する4)。 私のエクササイズでこの合計をループで実行するにはどうすればよいですか?

+3

あなたがこれまでに試してみましたか?私の頭の上から、これは 'do.call(rbind、...)'と 'by'(基底R)または' dplyr'( 'bind_rows'、' group_by'、 'summarize')で行うことができます。 – r2evans

+2

Plsはデータを 'dput(myList)'と一緒に扱うことができます。 – vaettchen

答えて

0

すべてのあなたのリストの要素は同じ構造(データ等の名称、種類)を持っている場合は、あなたがそれらすべてを組み合わせて、そのグループにそれらをdata.tablebyを使用し、得られたデータに対して操作を実行するためにrbindlistを使用することができます(詳細を見ますdata.tableドキュメント)

library(data.table) 
d1 <- data.table(len = c(0.89, 0.96, 1.03), petals = c(2,1,3)) 
d2 <- data.table(len = c(0.7, 0.96), petals = c(0,3)) 
big_list <- list(d1, d2) 

big_data <- rbindlist(big_list, use.names = T) 
big_data[, .(petals_sum = sum(petals)), .(len)] 

に出力が所定の出力0.96に等しいlen 4に等しいpetals_sumからlenによって合計すべてのエントリを有しています。

> big_data[, .(petals_sum = sum(petals)), .(len)] 
    len petals_sum 
1: 0.89   2 
2: 0.96   4 
3: 1.03   3 
4: 0.70   0 
1

私はいくつかのサンプルデータを作成する自由を取った。オリジナルの出力は、リストのリストよりもデータフレームのリストのように見えました。

sublists <- list(
    data.frame(
    length = c(0.89,0.96,1.03), 
    count = c(2,1,3) 
), 
    data.frame(
    length = c(0.70,0.96), 
    count = c(0,3) 
) 
) 
sublists 

そして、1つのデータフレームにそれを組み合わせると同じ長さのグループに沿って、それを合計するdplyrを使用します。

library(dplyr) 
unlisted <- bind_rows(sublists) 
unlisted 
summed <- unlisted %>% group_by(length) %>% summarise(count=sum(count)) 
summed 
関連する問題