簡體   English   中英

R data.frame:按向量分組的選定列的行總和

[英]R data.frame: rowSums of selected columns by grouping vector

我有一個帶有一系列數字列的數據框,兩邊都被(無關)字符列包圍。 我想獲得一個新的數據框,該框保留不相關列的位置,並通過某個分組矢量將數字列彼此相加(或按組將其他一些行功能應用於數據框)。 例:

sample = data.frame(cha1 = c("A","B"),num1=1:2,num2=3:4,num3=11:12,num4=13:14,cha2=c("C","D"))
> sample
  cha1 num1 num2 num3 num4 cha2
1    A    1    3   11   13    C
2    B    2    4   12   14    D

以獲取目標

> goal
  cha1 X1 X2 cha2 
1    A  4 24    C
2    B  6 26    D

即我已經根據分組向量gl(2,2,4) = (1,1,2,2) [levels: 1,2]對4個數字列求和

對於純數字數據框,我發現了以下方法:

sample_num = sample[,2:5] #select numeric columns
data.frame(t(apply(sample_num,1,function(row) tapply(row, INDEX=gl(2,2,4),sum))))

我可以將其與重新插入字符列結合起來以得到預期的結果,但是我確實在尋找一種更優雅的方法。 我對plyr方法(如果有的話)特別感興趣,因為我正嘗試遷移到plyr進行所有數據幀操作。 我想第一步是將數據幀轉換為長格式,但是我不知道如何從那里開始。

一個“絕對”的要求是我不能沒有gl(n,k,l)分組方法,因為我需要將此方法應用於廣泛的數據幀和分組因子。

編輯:為簡單起見,假設我知道哪些列是相關的數字列。 我不在乎如何選擇它們,而是在不弄亂原始數據幀結構的情況下如何進行分組求和。

謝謝!

Grpindex<-gl(2,2,4)    
goal<-cbind.data.frame(sample["cha1"],(t(rowsum(t(sample[,2:5]), paste0("X",Grpindex)))),sample["cha2"])

輸出:

  cha1 X1 X2 cha2
1    A  4 24    C
2    B  6 26    D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM