我dataframes合併列表和不同的列
> df.t
[[1]]
column_A start_B stop_C column_D column_E
1 0 23 2 3
1 23 200 1 0
2 0 55 0 1
[[2]]
column_A start_B stop_C column_D column_E
1 0 200 1 0
2 0 20 2 0
2 20 55 0 1
[[3]]
column_A start_B stop_C column_D column_E
1 0 200 0 0
2 0 55 4 2
的名單我想根據column_A拆分,並通過column_A,start_B和stop_C和sum column_D和column_E合併。對於每個唯一的column_A元素,我想使用唯一的start_B和stop_C元素來查找所有可能的唯一範圍組合。例如,在column_A = 1的情況下,start_B和stop_C之間唯一的最低到最高範圍是0 - 200,但是,df.t [[1]]已經打破了從0 - 23到23-200的範圍。導致這種預期輸出合併後
預期輸出:
> df.merge
column_A start_B stop_C column_D column_E
1 0 23 3 3
1 23 200 2 0
2 0 20 6 3
2 20 55 4 4
我知道爲了拆分和合並只是兩個dataframes我可以這樣做:
lst1 <- split(df.t[[1]], df.t[[1]]$column_A)
lst2 <- split(df.t[[2]], df.t[[2]]$column_A
require(survival)
df <- do.call(rbind, mapply(FUN = function(x, y) {
x$event <- y$event <- 0
lst1.spl <- survSplit(x, cut=y$stop_C, start='column_A', end='start_B', event='event')
lst2.spl <- survSplit(y, cut=x$stop_C, start='column_A', end='start_B', event='event')
mrg <- merge(lst1.spl, lst2.spl,
by=c('column_A', 'start_B', 'stop_C'))
mrg[c('column_A', 'start_B', 'stop_C', 'column_D', 'column_E')]
},
lst1, lst2, SIMPLIFY=FALSE))
但是對完成本一個dataframes列表和總和column_D和column_E我認爲我應該使用reduce(),但是我不確定它是可能的還是最好的方法!
df.merge = Reduce(function(...) merge(..., by=c('column_A', 'start_B', 'stop_C')), df.t)
這隻合併前三列,並且不合計column_D和column_E。我知道我應該使用ddply,但我不知道如何正確使用它與減少。
謝謝!
這裏'df.merge'我猜是你'後減少了('或者是預期的輸出 – akrun
也許沒有加入,與''dplyr' DF <之一 - 減少(rbind,DF。 t)%>%group_by(column_A,column_B,column_C)%>%summarise_each(funs(sum),column_D,column_E)' – ckluss
@ckluss您的代碼與預期結果略有不同 – akrun