R 数据表DT[i,j,by]未使用i中的条件选择组,试图根据组中唯一值的数量进行筛选
我不确定我的数据是怎么回事,也许我遗漏了一些简单的东西 我的数据集有一个id“dSc”和一个分配给每个id的群集(点)。我想筛选出那些只分配了一个群集的id e、 g.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 <-
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 Trymm[,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
...