簡體   English   中英

R:基於允許因子水平列表的子集數據框

[英]R: Subset dataframe based on list of allowed factor levels

我正在尋找可以返回數據mydata的行的函數

mydata=data.frame(group1=c(rep("MALE",6),rep("FEMALE",6)),group2=c(rep("TREATED",3),rep("UNTREATED",3)))
mydata
   group1    group2
1    MALE   TREATED
2    MALE   TREATED
3    MALE   TREATED
4    MALE UNTREATED
5    MALE UNTREATED
6    MALE UNTREATED
7  FEMALE   TREATED
8  FEMALE   TREATED
9  FEMALE   TREATED
10 FEMALE UNTREATED
11 FEMALE UNTREATED
12 FEMALE UNTREATED

哪些列等於特定因子水平(指定為列表)

selection=list(group1="MALE",group2="TREATED")

在此示例中,此函數將返回所選行的向量

c(1,2,3)

在不使用循環等的情況下,最簡單,最快的方法是什么?

PS列表selection可以是任何長度,並且在我的數據框中可以有任何名稱的任意數量的列。

(我知道subset ,但這不是我想要的)

編輯:下面是我剛剛做的一個功能,但是它並不優雅,所以我只是想知道是否已經有任何內置功能可以做我想要的事情:

mydata=data.frame(group1=c(rep("MALE",6),rep("FEMALE",6)),group2=c(rep("TREATED",3),rep("UNTREATED",3)))
selection=list(group1="MALE",group2="TREATED")

selrows=function(mydata,selection) {
nms=names(selection)
sel=data.frame(matrix(TRUE,nrow=nrow(mydata),ncol=length(nms)))
for (i in 1:length(nms)) { sel[,i]=(mydata[,nms[[i]]]==selection[nms[[i]]][[1]]) }
which(apply(sel*1,1,prod)==1)
}

selrows(mydata,selection)
1 2 3

也許這會有所幫助:

which(mydata[,1] %in% unlist(selection) & mydata[,2] %in% unlist(selection))
#[1] 1 2 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM