识别data.frame的多个子集中的大多数变量行,并将此信息合并到最终的data.frame中

时间:2016-04-26 23:41:08

标签: r dataframe subset

我有一个名为data的data.frame,包含18472行2229列。此data.frame(data$bin)的最后一列包含1:7的bin编号,尽管这可能是后来的动态。我想要完成的是为每个bin识别25个最可变的行,并使用这些行创建最终的data.frame。最终,这将导致data.frame具有25 * 7行乘2228列。我能够识别变量行,但我不确定如何在data内的所有二进制位上预先形成这一行:

> # identify variable rows
> library(genefilter)
> mostVarRows = head(order(rowVars(data), decreasing=TRUE), 25)

数据看起来像这样:

> head(data[(ncol(data)-3):ncol(data)])
              D6_NoSort_6000x3b_CCCCCGCCCTGA D6_NoSort_2250b_ATTATACTATTT D6_EcadSort_6000x3b_CACGACCTCCAC bin
0610005C13RIK                              0                            0                                0   2
0610007P14RIK                              0                            0                                0   6
0610009B22RIK                              0                            0                                0   3
0610009L18RIK                              0                            0                                0   2
0610009O20RIK                              0                            0                                0   3
0610010B08RIK                              0                            0                                0   6

我需要从每个bin中提取出最多变量的行到一个单独的data.frame中!

1 个答案:

答案 0 :(得分:1)

下面我创建一个模拟数据集。为了将来参考,你需要做的就是负担,因为你比我更了解你的想法。

# create mock data
set.seed(1)
data<-replicate(1000,rnorm(500,500,100))
data<-data.frame(data,bins= sample(c(1:7),500,replace=TRUE)) # create bins column

接下来我找到每一行的方差(假设这是你想要定义的方式&#34;大多数变量&#34;)。然后我按bin和variance(从最大到最低)排序。

data$var_by_row<-apply(data[,1:1000],1,var) # find variance of each row
data<-data[order(data$bins, -data$var_by_row),] # sort by bin and variance

由于数据排序正确,因此仍需要对每个箱子进行前25次观察并将它们堆叠在一起。你使用order()和head()肯定是在正确的轨道上。之后的do.call()步骤是堆叠head()结果所必需的,可能就是你正在寻找的东西。

data_sub_list<-by(data,INDICES = data$bins, head,n=25) # grab the first 25 observations of each bin
data_sub<-do.call('rbind',data_sub_list) # the above returns a list of 7 data frames...one per bin. this stacks them

> table(data_sub$bins) # each bin appears 25 times.

 1  2  3  4  5  6  7 
25 25 25 25 25 25 25 

> nrow(data_sub) # number of rows is 25*7
[1] 175