Rff:如何在 ffdf 对象中添加一个依赖于同一行中其他元素的新列?

Posted

技术标签:

【中文标题】Rff:如何在 ffdf 对象中添加一个依赖于同一行中其他元素的新列?【英文标题】:Rff:How to add a new column which depends on other elements in the same row in ffdf object?Rff:如何在 ffdf 对象中添加一个依赖于同一行中其他元素的新列? 【发布时间】:2015-04-09 12:14:00 【问题描述】:

我有一个 ffdf 对象 (23Mx4) 和一个值为“TUMOR”或“NORMAL”的字符向量,每个值都有一个名称,一个唯一的 icgc_specimen_id,所以这样我可以指示某个样本是正常细胞还是肿瘤细胞。

> head(expresion,4)
ffdf (all open) dim=c(23939146,4), dimorder=c(1,2) row.names=NULL
ffdf virtual mapping
                               PhysicalName VirtualVmode PhysicalVmode  AsIs VirtualIsMatrix PhysicalIsMatrix PhysicalElementNo
icgc_donor_id                 icgc_donor_id      integer       integer FALSE           FALSE            FALSE                 1
icgc_specimen_id           icgc_specimen_id      integer       integer FALSE           FALSE            FALSE                 2
gene_id                             gene_id      integer       integer FALSE           FALSE            FALSE                 3
normalized_read_count normalized_read_count       double        double FALSE           FALSE            FALSE                 4
                      PhysicalFirstCol PhysicalLastCol PhysicalIsOpen
icgc_donor_id                        1               1           TRUE
icgc_specimen_id                     1               1           TRUE
gene_id                              1               1           TRUE
normalized_read_count                1               1           TRUE
ffdf data
         icgc_donor_id icgc_specimen_id      gene_id normalized_read_count
1         DO3868           SP8217       SERINC1               9.276133e-05
2         DO3868           SP8217       SERINC2               1.925742e-04
3         DO3868           SP8217       SERINC3               2.531452e-05
4         DO3868           SP8217       SERINC4               4.811070e-07
5         DO3868           SP8217       SERINC5               4.402422e-07
6         DO3868           SP8217       SERP1                 7.620133e-05
7         DO3868           SP8217       SNX13                 1.088022e-05
8         DO3868           SP8217       SNX10                 5.652351e-06
:                    :                :            :                     :
23939139  DO2341           SP5052       FCRLB                 8.290500e-07
23939140  DO2341           SP5052       FDFT1                 7.108729e-05
23939141  DO2341           SP5052       FDPSL2A               7.999602e-08
23939142  DO2341           SP5052       GRIPAP1               6.532955e-05
23939143  DO2341           SP5052       GRINL1A               1.156511e-05
23939144  DO2341           SP5052       GRIP1                 2.465546e-06
23939145  DO2341           SP5052       GRIP2                 1.486814e-06
23939146  DO2341           SP5052       GRK1                  1.678295e-08
> head(specimen_type)
SP3358  SP6685 SP12716  SP8109 SP12780  SP8097 
"TUMOR" "TUMOR" "TUMOR" "TUMOR" "TUMOR" "TUMOR" 

我想在 ffdf 中添加一个名为 sp_type 的列,以便在每一行中了解我是在处理肿瘤细胞还是正常细胞。

在正常的数据框中我会这样做:

expresion$sp_type <- specimen_type[expresion$icgc_specimen_id]

我找不到在 ffdf 对象中执行相同操作的方法。

【问题讨论】:

【参考方案1】:

我会这样写:

require(ETLUtils)
require(ffbase)
expresion$sp_type <- with(expresion[c('icgc_specimen_id')], 
 recoder(as.character(icgc_specimen_id), from = names(specimen_type), to = specimen_type))

【讨论】:

以上是关于Rff:如何在 ffdf 对象中添加一个依赖于同一行中其他元素的新列?的主要内容,如果未能解决你的问题,请参考以下文章

ffdf对象列表的序列化

如何在 ffdf 中使用 apply 或 sapply 或 lapply?

如何将一个Access DataTable中的数据添加到同一数据库中的另一个Datatable中插入的数据依赖于文本框控件?

加载 ffdf 数据占用大量内存

ffdf 对象消耗额外的 RAM(以 GB 为单位)

如何使 SBT 任务依赖于同一个 SBT 项目中定义的模块?