我正在寻找能够返回数据框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
答案 0 :(得分:1)
也许这会有所帮助:
which(mydata[,1] %in% unlist(selection) & mydata[,2] %in% unlist(selection))
#[1] 1 2 3