我有一个1000行9列的矩阵。在第二列中,我有重复的名称,并且我想基于此列中的“前”十个“不同”名称对矩阵进行子集化。我该怎么写?
#example:
sig<-c(6,7,12,13,16,18,16,11,11,12,12,10,12,13,15,16,16,18,16,17,15,11,12,12)
name<-c(a,a,a,a,b,b,g,g,j,j,k,k,f,t,t,t,r,w,s,s,h,h,o,o)
第二列是“名称”,我想对(a,a,a,a,b,b,g,g,j,j,k,k,f,t,t,t,r, w,s,s)。它们是前十个不同的名称。
答案 0 :(得分:1)
这是一个例子:
# generate some data
set.seed(1)
m1 <- as.matrix(data.frame(a=sample(letters, 20, replace=T),
b=rnorm(20)))
head(m1)
a b
[1,] "g" " 1.51178117"
[2,] "j" " 0.38984324"
[3,] "o" "-0.62124058"
[4,] "x" "-2.21469989"
[5,] "f" " 1.12493092"
[6,] "x" "-0.04493361"
因此,a
列中的前三个唯一的“名称”为g, j, o
。
现在,您可以按如下所示对矩阵进行子集处理:
m1[m1[, 1] %in% unique(m1[, 1])[1:3], ]
a b
[1,] "g" " 1.51178117"
[2,] "j" " 0.38984324"
[3,] "o" "-0.62124058"
[4,] "j" "-1.98935170"
[5,] "j" "-0.47815006"