- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 3148 个
- 通用积分
- 7.5768
- 学术水平
- 193 点
- 热心指数
- 203 点
- 信用等级
- 161 点
- 经验
- 25351 点
- 帖子
- 703
- 精华
- 0
- 在线时间
- 981 小时
- 注册时间
- 2009-5-17
- 最后登录
- 2023-12-9
|
- > a <- data.frame(cardid = c("as12e","hyy3","yhff"),
- + termid = c("tm1","tm2","tm3"),
- + transnum = c(6,3,6),
- + transrmb = c(1000,500,800))
- > b1 <- tapply(a[, "transnum"], list(a[, "cardid"], a[, "termid"]), sum)
- > b2 <- tapply(a[, "transrmb"], list(a[, "cardid"], a[, "termid"]), sum)
复制代码好吧,b1,b2就是你想要的东西。如果你想要紧凑一点,将结果直接凑成一个列表输出,也可以直接执行以下代码:
- a <- data.frame(cardid = c("as12e","hyy3","yhff"),
- termid = c("tm1","tm2","tm3"),
- transnum = c(6,3,6),
- transrmb = c(1000,500,800))
- b <- lapply(a[, 3:4], function(x) {
- y <- tapply(x, list(a[, "cardid"], a[, "termid"]), sum)
- return(replace(y, is.na(y), 0))
- })
- print(b)
复制代码b就是你想要的东西。你知道你的提问帖贴了那么长时间,但回帖人数很少的原因么?
第一,以上两个结果矩阵,左上角应该为空,但你却加了cardid字段,这是引起混乱的做法
第二,最致命的一点,你说你想要得到XXXX这样的结果,可是你给出的样例矩阵,每个都只有两行,除去题头只有一行。你让我们怎么猜你想要的结果是什么样子的呢?
|
|