【发布时间】:2012-10-04 18:45:52
【问题描述】:
我在 R 中有一个数据框定义如下:
数据框:
col 1 col 2 col 3 col4
200 AIG 8.5 12
800 AIG 8.1 20.1
500 A1B 20 50.5
800 A1B 12 30
120 A2M 1.6 8.5
dat <- structure(list(col1 = c(200, 800, 500, 800, 120), col2 = structure(c(3L,
3L, 1L, 1L, 2L), .Label = c("A1B", "A2M", "AIG"), class = "factor"),
col3 = c(8.5, 8.1, 20, 12, 1.6), col4 = c(12, 20.1, 50.5,
30, 8.5)), .Names = c("col1", "col2", "col3", "col4"), row.names = c(NA,
-5L), class = "data.frame")
然后我想按 id 折叠行(在这种情况下,唯一 id 是 A1G、A1B、A2M)。
Col 1,我想通过添加具有相同 ID 的行来折叠它。
Col 2,我想将它折叠到每个唯一的 id
Col 3,我想将它折叠如下,取 col1*col3,将它们相加,然后除以 col1 的总和。
即A1G的新行值应该是(8.5*20+8.1*80)/(80+20)。也就是第 3 列的加权平均值,由 col1 的值加权。
Col 4,我想取最大值。
生成的数据框应如下所示:
第 1 列 第 2 列第 3 列第 4 列
800+200=1000 AIG (8.5*200+8.1*800)/1000=8.18 max(12,20.1)=20.1
800+500=1300 AIB (20*800+12*500)/1300=16.9 max(50.5, 30)= 50.5
120 A2M 1.6 8.5
有什么建议吗?
【问题讨论】:
-
展示您的 data.frame 的方式多么有趣。我希望你没有手工做所有这些键盘标签!
-
@GSee,哈哈哈,不就是从meta.stackexchange.com/questions/73566/…复制过来的
-
以后,您可以只使用
dput(这就是泰勒将他编辑到您问题中的代码的方式)。如果您还没有,请参阅经典的“how to make a great R reproducible example”。