[英]subset dataframe based on hierarchical preference of factor levels within column in 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.