r - 在嵌套列表中使用 R 和复杂数据框进行子集化

标签 r spp

我有一个来自 ChIP-seq 实验的非常大且复杂的数据框。该数据框包含小 DNA 测序读数的结合位置和分数。输出来自程序 spp。数据按染色体组织,名称 (spp_output$npl) 给出了所有染色体的列表。如果我选择一条染色体(比如 chr1),则

的输出
> names(spp_output$npl$chr1)
 [1] "x"          "y"          "evalue"     "fdr"        "nt"        
 [6] "nbgt"       "enr"        "enr.ub"     "enr.mle"    "nbgt.5"    
[11] "enr.5"      "enr.ub.5"   "enr.mle.5"  "nbgt.10"    "enr.10"    
[16] "enr.ub.10"  "enr.mle.10"

我需要按分数(“y”)为每个染色体对数据集进行子集化。如果我这样做似乎行不通

`spp_sub <- subset(spp_output, spp_output$npl$chr1$y > 40);` 

即便如此,我也必须为每个字符添加一行。您将如何对这些数据进行子集化? str(spp_output) 看起来像这样

 > str(bp)
List of 3890
 $ npl                 :List of 21
  ..$ chr1 :'data.frame':   5988 obs. of  17 variables:
  .. ..$ x         : num [1:5988] 3480459 3662576 3720354 4043865 4078829 ...
  .. ..$ y         : num [1:5988] 3.47 3.97 3.5 3.64 3.19 ...
  .. ..$ evalue    : num [1:5988] 162 88 159 135 283 ...
  .. ..$ fdr       : num [1:5988] 0.00296 0.00226 0.00305 0.00279 0.00445 ...
  .. ..$ nt        : int [1:5988] 6 5 5 0 5 4 3 5 1 1 ...
  .. ..$ nbgt      : int [1:5988] 1 1 1 3 2 0 4 2 0 0 ...
  .. ..$ enr       : num [1:5988] 3.033091 2.40555 2.40555 0.000391 1.656698 ...
  .. ..$ enr.ub    : num [1:5988] 207.74 176.66 176.66 3.79 47.37 ...
  .. ..$ enr.mle   : num [1:5988] 13.594 11.503 11.503 0.448 6.902 ...
  .. ..$ nbgt.5    : int [1:5988] 4 2 7 10 11 8 15 10 5 1 ...
  .. ..$ enr.5     : num [1:5988] 6.668665 8.28349 3.364963 0.000622 2.296721 ...
  .. ..$ enr.ub.5  : num [1:5988] 89.4 236.83 35.41 4.51 20.01 ...
  .. ..$ enr.mle.5 : num [1:5988] 22.657 34.509 11.503 0.747 7.502 ...
  .. ..$ nbgt.10   : int [1:5988] 7 4 16 11 20 17 30 14 19 11 ...
  .. ..$ enr.10    : num [1:5988] 8.69484 10.39636 3.29297 0.00113 2.68587 ...
  .. ..$ enr.ub.10 : num [1:5988] 81.36 154.57 25.68 8.13 19.91 ...
  .. ..$ enr.mle.10: num [1:5988] 27.19 38.34 10.46 1.36 8.42 ...
  ..$ chr10:'data.frame':   3907 obs. of  17 variables:
  .. ..$ x         : num [1:3907] 3030162 3047828 3077057 3086391 3163429 ...
  .. ..$ y         : num [1:3907] 3.26 6.06 3 4.43 3.6 ...
  .. ..$ evalue    : num [1:3907] 256 12 426 44 145 ...
  .. ..$ fdr       : num [1:3907] 0.00416 0.00103 0.00638 0.00139 0.00283 ...
  .. ..$ nt        : int [1:3907] 2 6 3 4 3 6 4 0 3 3 ...
  .. ..$ nbgt      : int [1:3907] 0 1 1 1 1 1 4 0 2 4 ...
  .. ..$ enr       : num [1:3907] 1.49 3.03 1.2 1.79 1.2 ...
  .. ..$ enr.ub    : num [1:3907] 17463 208 114 146 114 ...
  .. ..$ enr.mle   : num [1:3907] 15.69 13.59 7.32 9.41 7.32 ...
  .. ..$ nbgt.5    : int [1:3907] 11 7 12 8 10 4 12 4 8 9 ...
  .. ..$ enr.5     : num [1:3907] 0.519 4.347 0.964 2.167 1.135 ...
  .. ..$ enr.ub.5  : num [1:3907] 11.1 40.7 12.8 25.4 15.9 ...
  .. ..$ enr.mle.5 : num [1:3907] 3.41 13.59 4.39 8.3 5.23 ...
  .. ..$ nbgt.10   : int [1:3907] 21 13 17 10 18 15 12 11 19 22 ...
  .. ..$ enr.10    : num [1:3907] 0.567 5.158 1.401 3.577 1.328 ...
  .. ..$ enr.ub.10 : num [1:3907] 10.7 37.4 17.1 38.4 16.1 ...
  .. ..$ enr.mle.10: num [1:3907] 3.65 15.1 6.27 13.44 5.94 ...

...对于其余的染色体。非常感谢任何帮助或建议!!

最佳答案

这是 Split-Apply-Combine 工作的经典案例。

require(plyr)
llply(spp_output$npl, subset, y > 10)

关于r - 在嵌套列表中使用 R 和复杂数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164696/

相关文章:

r - 混合模型/lsmeans 结果的线图(使用 ggplot?)

r - 将内核密度 (kde2d) 与 basemap 相结合

bluetooth - 如何知道蓝牙适配器是否支持 WinXP SP3 中的串行端口配置文件 (SPP)?

audio - 通过 SPP 蓝牙实时传输 12-16 位音频是否现实?

蓝牙SPP模块SPP-C SPP-CA BK3211芯片——进入AT模式?

r - 在 R 中将 fread 与 foreach 和 doParallel 结合使用

r - 如何计算 R 中的频率(计数)变量?

R:lubridate 返回 NA – 意外地

android - 哪些 Android 版本支持 SPP 类 0x00?

android-bluetooth - 为 Android Nexus 5 调用 getBluetoothService() 时没有 BluetoothManagerCallback