我有一个名为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中!
答案 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