• 对于多维数据,可以接受矩阵进行子集选取

其中一行代表一组数据对应的若干个坐标:

  1. > vals <- outer(1:5, 1:5, FUN = "paste", sep = ",")
  2. > select <- matrix(ncol = 2, byrow = TRUE, c(
  3. + 1, 1,
  4. + 3, 1,
  5. + 2, 4
  6. + ))
  7. > select
  8. [,1] [,2]
  9. [1,] 1 1
  10. [2,] 3 1
  11. [3,] 2 4
  12. > vals
  13. [,1] [,2] [,3] [,4] [,5]
  14. [1,] "1,1" "1,2" "1,3" "1,4" "1,5"
  15. [2,] "2,1" "2,2" "2,3" "2,4" "2,5"
  16. [3,] "3,1" "3,2" "3,3" "3,4" "3,5"
  17. [4,] "4,1" "4,2" "4,3" "4,4" "4,5"
  18. [5,] "5,1" "5,2" "5,3" "5,4" "5,5"
  19. > vals[select]
  20. [1] "1,1" "3,1" "2,4"

利用该操作,我们可以利用向量化切片取子集的操作,实现diag 函数对矩阵的操作:

  1. > a1
  2. [,1] [,2] [,3] [,4] [,5]
  3. [1,] 1 5 9 13 17
  4. [2,] 2 6 10 14 18
  5. [3,] 3 7 11 15 19
  6. [4,] 4 8 12 16 20
  7. > diag(a1)
  8. [1] 1 6 11 16
  9. > my_select <- matrix(rep(1:nrow(a1), each=2), ncol = 2, byrow=T)
  10. > my_select
  11. [,1] [,2]
  12. [1,] 1 1
  13. [2,] 2 2
  14. [3,] 3 3
  15. [4,] 4 4
  16. > a1[my_select]
  17. [1] 1 6 11 16
  • 替代操作

直接直观。变量, 列号或名,行号或名。

6. 取子集 - 图1.

  • S4 对象的取子集操作

6. 取子集 - 图2

取子集操作应用

如果只是单纯的两个向量希望取交集。

可以通过制作有名向量,再将原向量给该有名向量取子集,获得其对应值:

6. 取子集 - 图3

就不必制作数据框用复杂的merge 了(当然也只是麻烦一点000)。