我有一个类似于以下的数据集:
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/