首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按列名从矩阵中提取多列

按列名从矩阵中提取多列
EN

Stack Overflow用户
提问于 2019-07-11 02:12:33
回答 1查看 1.7K关注 0票数 -1

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

df的示例如下所示:

代码语言:javascript
复制
> 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创建一个新的矩阵df_new

我试过了:

  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"))

对于我得到的第一个代码:

代码语言:javascript
复制
Error in "A":"C" : NA/NaN argument
In addition: Warning messages:
1: NAs introduced by coercion 
2: NAs introduced by coercion

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

代码语言:javascript
复制
Error in UseMethod("select_") : 
  no applicable method for 'select_' applied to an object of class "c('matrix', 'double', 'numeric')"

结果应该如下所示:

代码语言:javascript
复制
>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

我想我的错误类似于一个小的打字错误,但我没有找到它。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 03:22:02

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56976422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档