识别出现在表格中的条目/记录()R

时间:2015-07-13 17:20:37

标签: r elements identify

我试图识别出独特的'并且'接近独特的'来自披露控制项目的数据集的案例或记录​​。特别是某些变量的组合,只出现一次,两次等。

记录显示在:

table(Age,Sex,Ethnicity)

我最感兴趣的是:

的元素(是真的)
table(Age,Sex,Ethnicity)==1 
table(Age,Sex,Ethnicity)==2 

我知道我正在寻找大约150个案例:

sum(table(Age,Sex,Ethnicity)==1)

数据集中还有一个标识符,它是一个很好的输出或1的数字:长度(年龄)*长度(性别)*长度(种族)也同样好。我希望它返回一个类似的列表:

[1] 103 207 218....   
[41] * * *
[81] * * *

其中'标识符'对于150个案例中的前3个案件,= 103,207和218,其中:

table(Age,Sex,Ethnicity)==1

我天真地希望有类似的东西:

data$identifier[table(age,sex,mar,emp,edu) == 1]    
names(table(Age,Sex,Ethnicity) 

会工作,但没有这样的运气。我也查看了unique(),但返回了每个组合(发生一次或多次)。任何帮助或意见将不胜感激。

添加了可重复的示例(希望如此) 实施例

set.seed(1234)
a <- 1+rpois(100,1)
b <- 1+rpois(100,1)
c <- 1+rpois(100,1)
a[a >= 5] <- 4
b[b >= 5] <- 4
c[c >= 5] <- 4
eg <- cbind(1:100,a,b,c)
(sum(table(a,b,c)==1))

应该有12&#39; unique&#39;组合,我想使用eg的第一列(或数据集中的标识符)来识别

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是使用data.table包:

library(data.table)
eg.dt <- as.data.table(eg)
eg.dt[, list(N=.N), by=.(a,b,c)][N==1]

这是如何工作的:eg.dt[, list(N=.N), by=.(a,b,c)]计算每个(a,b,c)组合的出现次数。 [N==1]过滤掉恰好出现一次的内容。

或者,如果您想坚持使用数据框(而不是data.table),请尝试plyr

library(plyr)
eg <- data.frame(eg)
subset(ddply(eg, .(a, b, c), nrow), V1 == 1)

这可以用同样的方式:ddply(eg, .(a, b, c), nrow)生成一个数据框,其中“V1”列是组合发生的次数;然后你只需将其子集用于仅发生一次的组合。

我认为可能有一种方法可以用你的table(a,b,c)来做,但我想不出一个没有错综复杂的方法。