gpt4 book ai didi

r - 基于R中的多列选择行

转载 作者:行者123 更新时间:2023-12-05 08:21:10 25 4
gpt4 key购买 nike

我有这样一个数据框

 M2 <- matrix(c(1,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),nrow=7, 
dimnames=list(LETTERS[1:7],NULL))

我想根据多列选择行。例如,当我只想根据两列选择行时,我做了

 ans<-M2[which(M2[,1]==0 & M2[,2]==0)

但是当我只想选择那些基于三列或四列的值为零的行时,比如基于第 1、3 和 4 列或说 1、2、3、4,我该怎么做?

最佳答案

只是为了好玩,一个适用于 data.frame 并可用于大量列的解决方案:

DF <- as.data.frame(M2)
DF[rowSums(sapply(DF[,c(1,2,4)],`!=`,e2=0))==0,]
# V1 V2 V3 V4
#B 0 0 0 0
#F 0 0 0 0
#G 0 0 0 0

这里发生了什么?

  1. sapply 在子集 DF[,c(1,2,4)] 的列上循环。它将函数 !=(不等于)应用于子集的每一列并与 0 进行比较(e2!= 的第二个参数> 功能)。结果是一个逻辑值矩阵 (TRUE/FALSE)。
  2. rowSums 对该逻辑矩阵的每一行求和。逻辑值自动强制为 1/0。
  3. 然后我们测试这些行总和是否为 0(即行中的所有值不等于 0)。
  4. 生成的逻辑向量用于对行进行子集化。

当然,使用矩阵会更容易、更快速:

M2[rowSums(M2[,c(1,2,4)] != 0) == 0,]

关于r - 基于R中的多列选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19665929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com