让我们说t1
是:
t1 <- array(1:20, dim=c(10,10))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 1 11 1 11 1 11 1 11
[2,] 2 12 2 12 2 12 2 12 2 12
[3,] 3 13 3 13 3 13 3 13 3 13
[4,] 4 14 4 14 4 14 4 14 4 14
[5,] 5 15 5 15 5 15 5 15 5 15
[6,] 6 16 6 16 6 16 6 16 6 16
[7,] 7 17 7 17 7 17 7 17 7 17
[8,] 8 18 8 18 8 18 8 18 8 18
[9,] 9 19 9 19 9 19 9 19 9 19
[10,] 10 20 10 20 10 20 10 20 10 20
我想从此矩阵中删除第4-6行和第7-9行。
我知道如何使用
逐一删除它t2 <- t1[,-7]
t3 <- t2[,-8]
t4 <- t3[,-9]
t5 <- t4[-4,]
t6 <- t5[-5,]
t7 <- t6[-6,]
但是,我认为这是最愚蠢的做法。您能介意一些更明智的方法吗?
答案 0 :(得分:56)
你可以这样做:
t1<- t1[-4:-6,-7:-9]
答案 1 :(得分:6)
您可以使用
t1<- t1[-4:-6,-7:-9]
或
t1 <- t1[-(4:6), -(7:9)]
或
t1 <- t1[-c(4, 5, 6), -c(7, 8, 9)]
您可以将vectors
传递给要删除的rows/columns
。如果您尝试删除连续行/列,前两种方法很有用。如果您尝试删除离散 rows/columns
,则第三种方法很有用。
> t1 <- array(1:20, dim=c(10,10));
> t1[-c(1, 4, 6, 7, 9), -c(2, 3, 8, 9)]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 2 12 2 12 2 12
[2,] 3 13 3 13 3 13
[3,] 5 15 5 15 5 15
[4,] 8 18 8 18 8 18
[5,] 10 20 10 20 10 20
答案 2 :(得分:1)
> S = matrix(c(1,2,3,4,5,2,1,2,3,4,3,2,1,2,3,4,3,2,1,2,5,4,3,2,1),ncol = 5,byrow = TRUE);S
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 1 2 3 4
[3,] 3 2 1 2 3
[4,] 4 3 2 1 2
[5,] 5 4 3 2 1
> S<-S[,-2]
> S
[,1] [,2] [,3] [,4]
[1,] 1 3 4 5
[2,] 2 2 3 4
[3,] 3 1 2 3
[4,] 4 2 1 2
[5,] 5 3 2 1
``
只需使用命令 S&lt; - S [,2] 它删除了第二列。 同样删除一行 删除第二行 S&lt; -S [-2,]
答案 3 :(得分:0)
您还可以通过将逻辑布尔值向量提供给矩阵来删除行和列。这可以处理需要删除多个非连续行或非连续列的情况。
# TRUE = Keep a row/column
# FALSE = Delete a row/column
#
# FALSE for rows 4, 5, and 6
# Row: 1 2 3 4 5 6 7 8 9 10
rows_to_keep <- c(TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# FALSE for columns 7, 8, and 9
# Column: 1 2 3 4 5 6 7 8 9 10
cols_to_keep <- c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE)
要仅删除行:
t1 <- t1[rows_to_keep,]
要仅删除列:
t1 <- t1[,cols_to_keep]
要删除行和列:
t1 <- t1[rows_to_keep, cols_to_keep]
如果您事先不知道需要删除哪些行或列,则此编码技术很有用。 rows_to_keep
和cols_to_keep
向量可以由您的代码适当地计算。