首页 > 解决方案 > 统计某个数字的发生次数,将结果添加到新列

问题描述

我有以下数据集:

structure(list(SERIAL = c(118694001L, 118694001L, 118694001L, 
118695001L, 118696001L, 118696001L, 118696001L, 118697001L, 118698001L, 
118698001L, 118699001L, 118699001L, 118699001L, 118700001L, 118700001L, 
118701001L, 118701001L), RELATED = c(9999L, 9999L, 9999L, 3100L, 
3100L, 3100L, 3100L, 3100L, 3100L, 3100L, 9999L, 9999L, 9999L, 
3100L, 3100L, 3100L, 3100L)), class = "data.frame", row.names = c(NA, 
-17L))

我想创建一个新列“count”,它计算列中数字 3100 的发生率RELATED,但它必须按 分组SERIAL

我努力了

df <- within(data, DILs2 <- ave(SERIAL, list(SERIAL, RELATED == 3100), FUN=length))

结果应如下所示:

SERIAL  RELATED Count
118694001   9999    0
118694001   9999    0
118694001   9999    0
118695001   3100    1
118696001   3100    3
118696001   3100    3
118696001   3100    3
118697001   3100    1
118698001   3100    2
118698001   3100    2
118699001   9999    0
118699001   9999    0
118699001   9999    0
118700001   3100    2
118700001   3100    2
118701001   3100    2
118701001   3100    2

标签: r

解决方案


使用您的数据框。这可以通过一行代码完成。

 > data.frame(table(df$SERIAL,df$RELATED))
        Var1 Var2 Freq
1  118694001 3100    0
2  118695001 3100    1
3  118696001 3100    3
4  118697001 3100    1
5  118698001 3100    2
6  118699001 3100    0
7  118700001 3100    2
8  118701001 3100    2
9  118694001 9999    3
10 118695001 9999    0
11 118696001 9999    0
12 118697001 9999    0
13 118698001 9999    0
14 118699001 9999    3
15 118700001 9999    0
16 118701001 9999    0

剩下的就是美学了。

希望这会有所帮助。


推荐阅读