识别 table() R 中出现的条目/记录
Identify entries / records that appear in table() R
我正在尝试从披露控制项目的数据集中识别 'unique' 和 'near unique' 个案例或记录。特别是某些只出现一次、两次等的变量的组合
记录出现在:
table(Age,Sex,Ethnicity)
我对以下元素(为真)最感兴趣:
table(Age,Sex,Ethnicity)==1
table(Age,Sex,Ethnicity)==2
我知道我正在寻找大约 150 个案例:
sum(table(Age,Sex,Ethnicity)==1)
数据集中还有一个标识符,它是一个很好的输出,或者来自 1:length(Age)*length(Sex)*length(Ethnicity) 的数字也一样好。我希望它 return 像这样的列表:
[1] 103 207 218....
[41] * * *
[81] * * *
其中 'identifier' = 103、207 和 218 对于 150 个案例中的前 3 个,其中:
table(Age,Sex,Ethnicity)==1
我天真地希望是这样的:
data$identifier[table(age,sex,mar,emp,edu) == 1]
names(table(Age,Sex,Ethnicity)
可以,但没有这样的运气。我也研究过 unique() 但 returns 每个组合(出现一次或多次)。任何帮助或意见将不胜感激。
添加了可重现的示例(希望如此)
范例
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 个 'unique' 组合,我想使用 eg 的第一列(或数据集中的标识符)
来识别它们
我认为最简单的方法是使用 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)
做到这一点,但我想不出一个不复杂的方法。
我正在尝试从披露控制项目的数据集中识别 'unique' 和 'near unique' 个案例或记录。特别是某些只出现一次、两次等的变量的组合
记录出现在:
table(Age,Sex,Ethnicity)
我对以下元素(为真)最感兴趣:
table(Age,Sex,Ethnicity)==1
table(Age,Sex,Ethnicity)==2
我知道我正在寻找大约 150 个案例:
sum(table(Age,Sex,Ethnicity)==1)
数据集中还有一个标识符,它是一个很好的输出,或者来自 1:length(Age)*length(Sex)*length(Ethnicity) 的数字也一样好。我希望它 return 像这样的列表:
[1] 103 207 218....
[41] * * *
[81] * * *
其中 'identifier' = 103、207 和 218 对于 150 个案例中的前 3 个,其中:
table(Age,Sex,Ethnicity)==1
我天真地希望是这样的:
data$identifier[table(age,sex,mar,emp,edu) == 1]
names(table(Age,Sex,Ethnicity)
可以,但没有这样的运气。我也研究过 unique() 但 returns 每个组合(出现一次或多次)。任何帮助或意见将不胜感激。
添加了可重现的示例(希望如此) 范例
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 个 'unique' 组合,我想使用 eg 的第一列(或数据集中的标识符)
来识别它们我认为最简单的方法是使用 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)
做到这一点,但我想不出一个不复杂的方法。