2016-06-30 8 views
2

リスト内のすべての「収入」の合計である1つの列「収入」を除いて、すべての列が同じであるデータフレームのリストから単一のデータフレームを生成します。データフレームのリストの列を合計する

ID Income 
34 36  7360 
26 37  0 
23 38  0 
15 39  9100 

は私が合計を行うために)(減らす使用しようとしましたが、それは別の列を作成します。ここでは

は、データフレーム

mylist= structure(list(`1` = structure(list(ID = c(36L, 37L, 38L, 39L), Income = c(0, 0, 0, 9100)), .Names = c("ID", "Income"), row.names = c(1L, 2L, 3L, 4L), class = "data.frame"), `2` = structure(list(ID = c(36L, 37L, 38L, 39L), Income = c(0, 0, 0, 0)), .Names = c("ID", "Income"), row.names = c(1L, 2L, 3L, 4L), class = "data.frame"), `3` = structure(list(ID = c(36L, 37L, 38L, 39L), Income = c(7360, 0, 0, 0)), .Names = c("ID", "Income"), row.names = c(1L, 2L, 3L, 4L), class = "data.frame"))) 

> mylist 
$`1` 
    ID Income 
1 36  0 
2 37  0 
3 38  0 
4 39 9100 

$`2` 
    ID Income 
1 36  0 
2 37  0 
3 38  0 
4 39  0 

$`3` 
    ID Income 
1 36 7360 
2 37  0 
3 38  0 
4 39  0 

の私のリストは、これは私が何をしたいです私が避けたいのは、

Reduce(function(df1, df2) data.frame(df1[,], res=df1["Income"] + df2["Income"]),mylist) 

答えて

3

「IDが異なる」listが異なる場合があります。 mergeデータセットをReduceで入力し、最初の入力を除いて出力のrowSumsを実行して、「収入」列を作成します。

r1 <- Reduce(function(...) merge(..., by = "ID"), mylist) 
data.frame(r1[1], Income = rowSums(r1[-1])) 
# ID Income 
#1 36 7360 
#2 37  0 
#3 38  0 
#4 39 9100 

「IDが」が同じであり、list内のすべてのデータセットの同じ順序で、私たちは「マイリスト」の最初の要素から「ID」を抽出することによりdata.frameを作成した場合と、 と+を使用して '収入'の合計を取得します。

data.frame(mylist[[1]][1], Reduce(`+`, lapply(mylist, `[`, 'Income'))) 
+0

両方のソリューションに感謝します。どのように動作するかを理解しようとしているだけです。 –

+0

@AndroidBeginner最初のソリューションでは、単一のデータセットを作成するために 'ID'でマージしてから、2:ncol(r1)から列の 'rowSums'を実行します。 2番目の解決法では、 'Reduce(' + ''は 'mylist'の対応する値の要素ごとの合計を行います – akrun

0

rbindをデータフレームのリストに含めて集計するのはなぜですか?

system.time(teste <- do.call("rbind",mylist)) 
# user system elapsed 
# 0.004 0.000 0.000 

system.time(r1 <- Reduce(function(...) merge(..., by = "ID"), mylist)) 
# user system elapsed 
# 0.004 0.000 0.002 
aggregate(teste$Income, by=list(teste$ID), sum) 
# Group.1 x 
#1  36 7360 
#2  37 0 
#3  38 0 
#4  39 9100 
関連する問題