如何删除少于n个成员的因子 [英] How to drop factors that have fewer than n members

查看:58
本文介绍了如何删除少于n个成员的因子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以从数据表中删除少于N行(例如N = 5)的因子?

Is there a way to drop factors that have fewer than N rows, like N = 5, from a data table?

数据:

DT = data.table(x=rep(c("a","b","c"),each=6), y=c(1,3,6), v=1:9, 
                id=c(1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4))

目标:当id的数目小于5时,删除行.变量"id"是分组变量;当组中的行数小于5时,要删除的组.在DT中,需要确定哪些组的成员少于5个(组"1"和"4"),然后删除这些行.

Goal: remove rows when the number of id is less than 5. The variable "id" is the grouping variable, and the groups to delete when the number of rows in a group is less than 5. In DT, need to determine which groups have less than 5 members, (groups "1" and "4") and then remove those rows.

 1: a 3 5  2
 2: b 6 6  2
 3: b 1 7  2
 4: b 3 8  2
 5: b 6 9  2
 6: b 1 1  3
 7: c 3 2  3
 8: c 6 3  3
 9: c 1 4  3
10: c 3 5  3
11: c 6 6  3

这是一种方法....

获取因素的长度以及要保留的因素

Get the length of the factors, and the factors to keep

nFactors<-tapply(DT$id,DT$id,length)
keepFactors <- nFactors >= 5

然后标识要保留的ID,并保留这些行.这样可以产生预期的结果,但是有更好的方法吗?

Then identify the ids to keep, and keep those rows. This generates the desired results, but is there a better way?

idsToKeep <- as.numeric(names(keepFactors[which(keepFactors)]))
DT[DT$id %in% idsToKeep,]

推荐答案

由于您以data.table开头,因此第一部分使用data.table语法.

Since you begin with a data.table, this first part uses data.table syntax.

编辑:感谢Arun(评论)帮助我改善了此数据表的答案

Thanks to Arun (comment) for helping me improve this data table answer

DT[DT[, .(I=.I[.N>=5L]), by=id]$I]
#     x y v id
#  1: a 3 5  2
#  2: a 6 6  2
#  3: b 1 7  2
#  4: b 3 8  2
#  5: b 6 9  2
#  6: b 1 1  3
#  7: b 3 2  3
#  8: b 6 3  3
#  9: c 1 4  3
# 10: c 3 5  3
# 11: c 6 6  3

在R底下,您可以使用

df <- data.frame(DT)
tab <- table(df$id)
df[df$id %in% names(tab[tab >= 5]), ]
#    x y v id
# 5  a 3 5  2
# 6  a 6 6  2
# 7  b 1 7  2
# 8  b 3 8  2
# 9  b 6 9  2
# 10 b 1 1  3
# 11 b 3 2  3
# 12 b 6 3  3
# 13 c 1 4  3
# 14 c 3 5  3
# 15 c 6 6  3

这篇关于如何删除少于n个成员的因子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆