按 R 中的两列计算 data.table 中的重复项数



我正在尝试计算 z 列中每个唯一字符串值的重复次数 data.table 中的另外两列 (x,y((使用 data.table 包或等效快的东西,我有数百万个实际行可以运行它(:

我有这样的数据:

dt <- data.table(x=c("aa","aa","aa","bb","cc","cc","cc","cc","cc","cc"), y=c(2,2,1,1,1,1,2,2,2,3),z=c("d","d","a","d","a","a","e","e","b", "a")) 
x y z
1: aa 2 d
2: aa 2 d
3: aa 1 a
4: bb 1 d
5: cc 1 a
6: cc 1 a
7: cc 2 e
8: cc 2 e
9: cc 2 b
10: cc 3 a

我想这样:

dt.desired <- data.table(x=c("aa","aa", "bb","cc", "cc","cc", "cc"), y=c(1,2,1,1,2,2,3), z=c("a","d","d","a","b","e","a"), n=c(1,2,1,2,1,2,1))

x y z n
1: aa 1 a 1
2: aa 2 d 2
3: bb 1 d 1
4: cc 1 a 2
5: cc 2 b 1
6: cc 2 e 2
7: cc 3 a 1

您可以使用dplyrmagrittrtidyverse中执行此操作:

library(data.table)
library(tidyverse)
> dt %>% count(x,y,z)
# A tibble: 7 x 4
x         y z         n
<chr> <dbl> <chr> <int>
1 aa       1. a         1
2 aa       2. d         2
3 bb       1. d         1
4 cc       1. a         2
5 cc       2. b         1
6 cc       2. e         2
7 cc       3. a         1

如果要创建新的数据框,只需分配给变量,例如

z <- dt %>% count(x,y,z)

最新更新