我有一个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
。
我尝试过:
df_new = df[,c("A":"C","E","F":"G")]
df_new = select(df,"A":"C","E","F":"G")
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
我认为我的错误有点像拼写错误,但我没有发现。预先感谢!
答案 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