子集两个变量的表以删除0值

Javivr

我有一张表,例如以下示例,该表是从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)),由“地层”分组,iflength所述的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章