[英]Selecting rows based on multiple columns in R
我有一個這樣的數據框
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
這里會發生什么?
sapply
在子集DF[,c(1,2,4)]
的列上循環。 它將函數!=
(不等於)應用於子集的每一列,並與0比較( e2
是!=
函數的第二個參數)。 結果是邏輯值矩陣(TRUE / FALSE)。 rowSums
獲取此邏輯矩陣每一行的總和。 邏輯值將自動強制為1/0。 當然,使用矩陣更容易,更快捷:
M2[rowSums(M2[,c(1,2,4)] != 0) == 0,]
您可以使用rowSums:
M2[rowSums(M2[,c(1,2,3,4)]) == 0,]
為您提供第1,2,3和4列為零的所有行:
[,1] [,2] [,3] [,4]
B 0 0 0 0
F 0 0 0 0
G 0 0 0 0
請注意,如果矩陣中有正數和負數,則此功能將無效。
您的問題對我來說不是很清楚,但這是您要找的東西嗎?
要基於第1到第4列的值進行選擇,請執行以下操作:
ans <- M2[M2[,1]==0 & M2[,2]==0 & M2[,3]==0 & M2[,4]==0,]
#> ans
# [,1] [,2] [,3] [,4]
#B 0 0 0 0
#F 0 0 0 0
#G 0 0 0 0
這將導致M2的子集,其中所有列1至4均為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.