簡體   English   中英

r聚合數據幀:某些列未更改,某些列已聚合

[英]r aggregate dataframe: some columns unchanged, some columns aggregated

我試圖查看手冊進行匯總,應用等操作,但是找不到通過應用的函數跳過某些列而將其他列原樣復制的示例。 例:

> olddf = data.frame(code=c("one","one","two"), val1=c(1,2,3), val2=c(4,5,6), val3=c(7,8,9))
> olddf
  code val1 val2 val3
1  one    1    4    7
2  one    2    5    8
3  two    3    6    9
> 

如何聚合olddf,以便獲得新的數據框,其中:

  • 代碼保持原樣
  • val1跳過
  • val2通常是聚合的,例如sum ()
  • 然后根據較早的聚合之一創建新列 ...例如,新列= sum(val3)/ sum(val2)?

我基本上想要:

> newdf
  code val2 newcol
1  one    9 1.6666
2  two    6 1.5000

我想一步來做,而不是定義一個單獨的函數來處理每個列/聚合。 這可能嗎?

試試data.table

library(data.table)
setDT(olddf)[, .(val2 = sum(val2),
                 newcol = sum(val3)/sum(val2)), by = code]
#    code val2   newcol
# 1:  one    9 1.666667
# 2:  two    6 1.500000

您可以分兩步執行此操作,關鍵是使用聚合函數。 在by()參數中,您想要指定聚合方式。 在這種情況下,請根據“代碼”中的值進行匯總。 然后,僅通過指定感興趣的功能添加第三列。

aggregate <- aggregate(olddf[, c("val2", "val3")], by = list(olddf$code), FUN = sum)
aggregate$newcol <- aggregate$val3/aggregate$val2

暫無
暫無

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

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