- 对于多维数据,可以接受矩阵进行子集选取
其中一行代表一组数据对应的若干个坐标:
> vals <- outer(1:5, 1:5, FUN = "paste", sep = ",")
> select <- matrix(ncol = 2, byrow = TRUE, c(
+ 1, 1,
+ 3, 1,
+ 2, 4
+ ))
> select
[,1] [,2]
[1,] 1 1
[2,] 3 1
[3,] 2 4
> vals
[,1] [,2] [,3] [,4] [,5]
[1,] "1,1" "1,2" "1,3" "1,4" "1,5"
[2,] "2,1" "2,2" "2,3" "2,4" "2,5"
[3,] "3,1" "3,2" "3,3" "3,4" "3,5"
[4,] "4,1" "4,2" "4,3" "4,4" "4,5"
[5,] "5,1" "5,2" "5,3" "5,4" "5,5"
> vals[select]
[1] "1,1" "3,1" "2,4"
利用该操作,我们可以利用向量化切片取子集的操作,实现diag 函数对矩阵的操作:
> a1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> diag(a1)
[1] 1 6 11 16
> my_select <- matrix(rep(1:nrow(a1), each=2), ncol = 2, byrow=T)
> my_select
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3 3
[4,] 4 4
> a1[my_select]
[1] 1 6 11 16
- 替代操作
直接直观。变量, 列号或名,行号或名。
.
- S4 对象的取子集操作
取子集操作应用
如果只是单纯的两个向量希望取交集。
可以通过制作有名向量,再将原向量给该有名向量取子集,获得其对应值:
就不必制作数据框用复杂的merge 了(当然也只是麻烦一点000)。