我有一张表,例如以下示例,该表是从df中获得的(0 ==控件; 1 == case;标题数字是分层):
208 209 210 211 212 213
0 4 16 3 5 2 0
1 0 7 2 0 6 2
我需要创建一个新的df,以0个案例(1)或控件(0)删除这些层次。
到目前为止,我创建了以下代码,该代码创建了带有逻辑的向量:
table(df$status, df$strata)>0
但还没有走得更远。
我们可以用 subset
subset(df, strata %in% dimnames(tbl)[[2]][colSums(tbl==0)==0])
# status strata
#1 0 211
#5 1 209
#7 0 209
#8 1 208
#9 1 211
#10 0 208
我认为问题不在于检查'df'是否等于0。实际上,OP希望基于频率对数据集进行子集化。
一个紧凑的选择是使用 data.table
library(data.table)
setDT(df)[, if(uniqueN(status)>1) .SD , by = .(strata)]
# strata status
#1: 211 0
#2: 211 1
#3: 209 1
#4: 209 0
#5: 208 1
#6: 208 0
即,我们在这里将所述“data.frame”到“data.table”( setDT(df)
),由“地层”分组,if
在length
所述的unique
在“状态”要素是大于1(在这种情形2),我们得到的所述子集数据表(.SD
)。
使用类似逻辑的一个选项dplyr
是
library(dplyr)
df %>%
group_by(strata) %>%
filter(n_distinct(status)>1)
set.seed(24)
df <- data.frame(status = sample(0:1, 10, replace=TRUE),
strata = sample(208:213, 10, replace = TRUE))
tbl <- table(df)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句