如何根据递增的数字选择矩阵的列

How to select the column of a matrix based on increasing numbers

提问人:rezgar 提问时间:12/19/2022 更新时间:12/19/2022 访问量:49

问:

我有一个包含 4 列的矩阵(下面的示例)

   a  b c   d
1 10 85 0 115
2 15 74 0 125
3 18 65 0 130
4 20 64 0 150

我只想选择一个列,其数量随着列的长度(A 和 D 列)的增加而增加。

   A   D
1 10 115
2 15 125
3 18 130
4 20 150
df<-data.frame(A=c(10,15,18,20),B=c(85,74,65,64),
               C=c(0,0,0,0),D=c(115,125,130,150))

注意

我的实际数据很大,这个例子是一个更好地解释的测试。
R 矩阵 数据操作

评论


答:

1赞 user2974951 12/19/2022 #1

用于严格增加

> names(which(colMeans(sapply(df,diff)>0)==1))
[1] "a" "d"

在数据框上使用它

> df[,colMeans(sapply(df,diff)>0)==1]
   a   d
1 10 115
2 15 125
3 18 130
4 20 150

评论

0赞 rezgar 12/19/2022
我想返回所有行,而不仅仅是列的名称
0赞 user2974951 12/19/2022
@rezgar 您知道如何使用列名或索引对数据框进行子集化吗?
1赞 rezgar 12/19/2022
谢谢,我已经得到了这条鳕鱼df[,(colMeans(sapply(df,diff)>0)==1)]
1赞 Ronak Shah 12/19/2022 #2

为此,有一个内置函数可以检查向量是否已排序,而无需实际排序的成本。因此,这应该在大型数据集上工作得更快。is.unsorted

strictly_increasing <- function(x) !is.unsorted(x, strictly = TRUE)

df[sapply(df, strictly_increasing)]

#   A   D
#1 10 115
#2 15 125
#3 18 130
#4 20 150

您也可以将它与dplyr -

library(dplyr)

df %>% select(where(strictly_increasing))