通过列名从矩阵中提取多列

时间:2019-07-10 18:12:32

标签: r select

我有一个df格式的matrix,里面的所有值都是numeric(或NA)。
df的示例如下:

> dput(df)
structure(c(0, 1, 2, 3, 1, 2, 3, 4, 19.92053183, 19.94818362, 
19.97583542, 20.00348721, -0.846185488, -0.870922179, -0.895658869, 
-0.92039556, 56, 56, 56, 56, NA, 0.529513867, 0.477141211, 0.441261572, 
NA, NA, 32, 32), .Dim = c(4L, 7L), .Dimnames = list(c("A", "B", 
"C", "D"), c("A", "B", "C", "D", "E", "F", "G")))

我想通过按名称选择所有行和特定列,从df_new创建一个新矩阵df

我尝试过:

  1. df_new = df[,c("A":"C","E","F":"G")]
  2. df_new = select(df,"A":"C","E","F":"G")
  3. df_new = select(df,c("A":"C","E","F":"G"))

对于第一个代码,我得到了:

Error in "A":"C" : NA/NaN argument
In addition: Warning messages:
1: NAs introduced by coercion 
2: NAs introduced by coercion

对于第二和第三个代码,我得到:

Error in UseMethod("select_") : 
  no applicable method for 'select_' applied to an object of class "c('matrix', 'double', 'numeric')"

结果应如下所示:

>df_new = df[,c("A":"C","E","F":"G")]
>df_new
 A B C E F G
A 1 NA 5 9 11 13
B 2 4 6 10 12 NA
C NA 5 NA NA 14
D 15 5 16 18 19

我认为我的错误有点像拼写错误,但我没有发现。预先感谢!

1 个答案:

答案 0 :(得分:1)

从前:dplyr::select适用于框架,而不适用于矩阵。幸运的是,subset有一个S3方法subset.matrix

subset(df, TRUE, c(A:C, E))
#   A B        C  E
# A 0 1 19.92053 56
# B 1 2 19.94818 56
# C 2 3 19.97584 56
# D 3 4 20.00349 56

或者,您也可以“减去”列。

subset(df, TRUE, -D)
#   A B        C  E         F  G
# A 0 1 19.92053 56        NA NA
# B 1 2 19.94818 56 0.5295139 NA
# C 2 3 19.97584 56 0.4771412 32
# D 3 4 20.00349 56 0.4412616 32