R 数据表DT[i,j,by]未使用i中的条件选择组,试图根据组中唯一值的数量进行筛选

R 数据表DT[i,j,by]未使用i中的条件选择组,试图根据组中唯一值的数量进行筛选,r,select,filter,data.table,unique,R,Select,Filter,Data.table,Unique,我不确定我的数据是怎么回事,也许我遗漏了一些简单的东西 我的数据集有一个id“dSc”和一个分配给每个id的群集(点)。我想筛选出那些只分配了一个群集的id e、 g.BS:100021仅为其分配了1个簇点,而BS:100135为其分配了6个簇点,如下示例所示: set.seed(1) xx <- cbind(rep("BS:100021",30),rep(1,30)) yy <- cbind(rep("BS:100135",60),rep(1:6,10)) mm <-

我不确定我的数据是怎么回事,也许我遗漏了一些简单的东西

我的数据集有一个id“dSc”和一个分配给每个id的群集(点)。我想筛选出那些只分配了一个群集的id

e、 g.
BS:100021仅为其分配了1个簇点
,而
BS:100135为其分配了6个簇点
,如下示例所示:

set.seed(1) 
xx  <- cbind(rep("BS:100021",30),rep(1,30))
yy  <- cbind(rep("BS:100135",60),rep(1:6,10))
mm  <- as.data.table(rbind(xx,yy))
names(mm) <- c("dSc","Cluster")
我还没有完全康复

          dSc Cluster
 1: BS:100021       1
 2: BS:100021       1
 3: BS:100021       1
 4: BS:100021       1
 5: BS:100021       1
 6: BS:100021       1
 7: BS:100021       1
 8: BS:100021       1
 9: BS:100021       1
10: BS:100021       1
11: BS:100021       1
12: BS:100021       1
13: BS:100021       1
14: BS:100021       1
15: BS:100021       1
16: BS:100021       1
17: BS:100021       1
18: BS:100021       1
19: BS:100021       1
20: BS:100021       1
21: BS:100021       1
22: BS:100021       1
23: BS:100021       1
24: BS:100021       1
25: BS:100021       1
26: BS:100021       1
27: BS:100021       1
28: BS:100021       1
29: BS:100021       1
30: BS:100021       1
31: BS:100135       1
32: BS:100135       2
33: BS:100135       3
34: BS:100135       4
35: BS:100135       5
36: BS:100135       6
37: BS:100135       1
38: BS:100135       2
39: BS:100135       3
40: BS:100135       4
41: BS:100135       5
42: BS:100135       6
43: BS:100135       1
44: BS:100135       2
45: BS:100135       3
46: BS:100135       4
47: BS:100135       5
48: BS:100135       6
49: BS:100135       1
50: BS:100135       2
51: BS:100135       3
52: BS:100135       4
53: BS:100135       5
54: BS:100135       6
55: BS:100135       1
56: BS:100135       2
57: BS:100135       3
58: BS:100135       4
59: BS:100135       5
60: BS:100135       6
61: BS:100135       1
62: BS:100135       2
63: BS:100135       3
64: BS:100135       4
65: BS:100135       5
66: BS:100135       6
67: BS:100135       1
68: BS:100135       2
69: BS:100135       3
70: BS:100135       4
71: BS:100135       5
72: BS:100135       6
73: BS:100135       1
74: BS:100135       2
75: BS:100135       3
76: BS:100135       4
77: BS:100135       5
78: BS:100135       6
79: BS:100135       1
80: BS:100135       2
81: BS:100135       3
82: BS:100135       4
83: BS:100135       5
84: BS:100135       6
85: BS:100135       1
86: BS:100135       2
87: BS:100135       3
88: BS:100135       4
89: BS:100135       5
90: BS:100135       6
          dSc Cluster
您可以使用:

list.of.dSc <- NULL

for(i in seq_along(unique(mm$dSc))){
    if(length(unique(mm[mm$dSc == as.character(unique(mm$dSc)[i]), "Cluster"])) == 1){
        list.of.dSc <- c(list.of.dSc, unique(as.character(mm$dSc))[i])
       }
}

mm[!(mm$dSc %in% list.of.dSc),]

         dSc Cluster
31 BS:100135       1
32 BS:100135       2
33 BS:100135       3
34 BS:100135       4
35 BS:100135       5
...

list.of.dSc Try
mm[,if(uniqueN(Cluster)>1L).SD,by=dSc]
。这是您正在进行的操作的当前习惯用法
uniqueN
与这里的
length(unique())
做了同样的事情。如果你能编辑标题来描述这个问题,这将是一个更好的问题,哪怕是一点点。@Frank它是有效的,有没有理由
mm[length(unique(Cluster))>1.SD,dSc]
不起作用work@Bg1850对
DT[i,j,by]
在查看
j
by
之前,应用
i
中的过滤操作。语法可能会被扩展,以便在查看了
之后进行过滤,但它还不可用。这里有一个建议的扩展:我在那里链接到您的问题,这样包作者就可以看到它,并且可以在进行扩展时发布答案。@坦率地感谢您的解释,我作为一个用户会假设如果它像sql一样,那么过滤操作应该在
j
by
之后进行,至少对我来说更直观。不,不是真的。我想过滤掉只有一个聚类的
dSc
,我想我误解了你的问题。请选择要查看的列好吗?意思是:
mm[as.numeric(mm$Cluster)>1,“dSc”]
请看弗兰克的评论,这正是我想要的achieve@Bg1850我已经修改了密码。让我知道这是否适合你!或
test=带(mm,tapply(集群,dSc,FUN=功能(x)长度(唯一(x))>1L));mm[mm$dSc%中的%names(test)[test],]
list.of.dSc <- NULL

for(i in seq_along(unique(mm$dSc))){
    if(length(unique(mm[mm$dSc == as.character(unique(mm$dSc)[i]), "Cluster"])) == 1){
        list.of.dSc <- c(list.of.dSc, unique(as.character(mm$dSc))[i])
       }
}

mm[!(mm$dSc %in% list.of.dSc),]

         dSc Cluster
31 BS:100135       1
32 BS:100135       2
33 BS:100135       3
34 BS:100135       4
35 BS:100135       5
...