【发布时间】:2018-04-27 13:33:33
【问题描述】:
我正在尝试根据“区域类型”列中的值将行放入列表中,并将这些列表放入其他数据结构(向量或列表)中。 数据如下所示(~700 000 行):
chr CS CE CloneName score strand # locs per clone # capReg alignments Type of region
chr1 10027684 10028042 clone_11546 1 + 1 1 chr1_10027880_10028380_DNaseI
chr1 10027799 10028157 clone_11547 1 + 1 1 chr1_10027880_10028380_DNaseI
chr1 10027823 10028181 clone_11548 1 - 1 1 chr1_10027880_10028380_DNaseI
chr1 10027841 10028199 clone_11549 1 + 1 1 chr1_10027880_10028380_DNaseI
这是我尝试做的:
typeReg=dat[!duplicated(dat$`Type of region`),]
for(i in 1:nrow(typeReg)){
res[[i]]=dat[dat$`Type of region`==typeReg[i,]$`Type of region`,]
}
for 循环花费了太多时间,所以我尝试使用 apply:
res=apply(typeReg, 1, function(x){
tmp=dat[dat$`Type of region`==x[9],]
})
但它也很长(区域类型列中有 300 000 个唯一值)。 您对我的问题有解决方案吗?或者需要这么长时间是正常的吗?
【问题讨论】:
-
听起来像你想要的
res = split(dat, dat$`Type of region`) -
apply用于矩阵上的行(或列)操作。在数据框上使用并不是很好(首先发生的事情是将您的 df 转换为矩阵,丢失列之间的所有类差异),然后它将按行操作(使用您的MAR = 1参数)。您不想在每个单独的行上运行一个函数,您想获取子集,所以apply并没有真正解决这个问题。 -
我还想知道您是否真的需要在下一步之前拆分数据。如果您共享您的目标,那么可能有比将这些数据复制到列表中,然后再次将其复制到其他结构中更好的方法。
-
你没有说你为什么要这样做,但你很有可能可以通过使用 dplyr 包中的
group_by来避免它 -
所以我的数据框中还有很多其他列,我没有显示,因为我认为我不相关。但基本上,我计算了每一行的 p 值,现在我想为每种类型的区域都有一个最大似然估计。因此,合乎逻辑的步骤是获取每种区域类型的行
标签: r bioinformatics