r - 计算唯一组组合中的出现次数

标签 r unique combinations

我有一个类似于以下的数据集:

SSN Auto    MtgHe   Personal    Other   None
A   1           1    0          0       0
B   1           1    0          0       0
C   1           0    0          0       0
D   1           0    1          1       0
E   0           0    0          0       1
F   0           0    0          0       1
G   0           0    0          0       1

SSN 是个人,Auto、MtgHe、Personal、Other 是贷款类别,“无”表示不存在贷款。总共有 15 种独特的可能贷款组合加上 1 种其他可能的“无”,表示不存在贷款。因此,例如,一个人可能只有汽车贷款,或汽车和个人贷款,或者根本没有贷款。我想要一些具有不同组合的 SSN。使用上表,结果如下所示:
Cnt Auto    MtgHe   Personal    Other   None
2   1           1    0          0       0
1   1           0    0          0       0
1   1           0    1          1       0
3   0           0    0          0       1

关于如何在 R 中实现这一点的任何想法?我的数据集确实有数万个案例,但任何帮助将不胜感激。

最佳答案

和强制性data.table版本(唯一不会对数据集重新排序的版本)

library(data.table)
setDT(df)[, .(Cnt = .N), .(Auto, MtgHe, Personal, Other, None)]
#    Auto MtgHe Personal Other None Cnt
# 1:    1     1        0     0    0   2
# 2:    1     0        0     0    0   1
# 3:    1     0        1     1    0   1
# 4:    0     0        0     0    1   3

或者更短的版本可能是
temp <- names(df)[-1]
setDT(df)[, .N, temp]
#    Auto MtgHe Personal Other None N
# 1:    1     1        0     0    0 2
# 2:    1     0        0     0    0 1
# 3:    1     0        1     1    0 1
# 4:    0     0        0     0    1 3

只是为了好玩,这是另一个(无序的)基础 R 版本
Cnt <- rev(tapply(df[,1], do.call(paste, df[-1]), length))
cbind(unique(df[-1]), Cnt)
#   Auto MtgHe Personal Other None Cnt
# 1    1     1        0     0    0   2
# 3    1     0        0     0    0   1
# 4    1     0        1     1    0   1
# 5    0     0        0     0    1   3

还有一个 dplyr完整版
library(dplyr)
group_by(df, Auto, MtgHe, Personal, Other, None) %>% tally
# Source: local data frame [4 x 6]
# Groups: Auto, MtgHe, Personal, Other
# 
#   Auto MtgHe Personal Other None n
# 1    0     0        0     0    1 3
# 2    1     0        0     0    0 1
# 3    1     0        1     1    0 1
# 4    1     1        0     0    0 2

关于r - 计算唯一组组合中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27829558/

相关文章:

R 官包 : How to specify a certain placeholder when there are multiple nearly identical ones

javascript - 在任意数量的数组之间查找公共(public)项的最有效方法

sql - 如何删除 MySQL 数据库中的重复行? (保留主 ID 最低的那个)

python - 如何将字符串字典转换为列表到字典列表?

r - 如何选择唯一点

python - Python 扩展模块的 C 代码中的 "if item in list/set' 相当于什么?

r - 在 (r)gedit 中显示多个 R 图形窗口

r - 在 sf 文件 R 中按类别创建多边形

r - 在 R 中设置 Treemapify 子组颜色

c - 使用 3 个字符生成 200 个唯一的 40 个字符的字符串