[英]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.