我正在使用一些使用数据表类的R代码,而不是数据框类。
如何在R中执行以下操作而不必将map.dt转换为map.df?
map.dt = data.table(chr = c("chr1","chr1","chr1","chr2"), ref = c(1,0,3200,3641), pat = c(1,3020,3022, 3642), mat = c(1,0,3021,0))
parent = "mat"
chrom = "chr1"
map.df<-as.data.frame(map.dt);
parent.block.starts<-map.df[map.df$chr == chrom & map.df[,parent] > 0,parent];
注意:父需要动态分配,它是用户的输入。在这个例子中,我选择了“mat”,但它可以是任何列。
注1:parent.block.starts应该是整数向量。
注2:map.dt是一个数据表,其中列名是c(“chr”,“ref”,“pat”,“mat”)。
问题是在数据表中我无法按名称访问给定列,或者至少我无法弄清楚如何。
如果您有任何建议,请与我们联系!
谢谢!
答案 0 :(得分:3)
有点不清楚最终目标是什么,特别是没有样本数据,但如果你想按字符名称访问行,有两种方法可以做到这一点:
Columns = c("A", "B")
dt[,Columns, with=F]
dt[,get("A")]
dt[,list(get("A"), get("B"))]
但是如果你发现自己经常需要使用这种技术,那么你可能很难使用data.table
。
修改强>
根据您的修改,此行将返回相同的结果,而无需进行任何as.data.frame
转换:
> map.dt[chr==chrom & get(parent) > 0, get(parent)]