【问题标题】:data table and data frame operations数据表和数据框操作
【发布时间】:2013-09-26 00:18:24
【问题描述】:

我正在使用一些使用数据表类而不是数据框类的 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];

注意:父母需要动态分配,它是用户的输入。在此示例中,我选择了“垫子”,但它可以是任何列。

注意1:parent.block.starts 应该是一个整数向量。

注意 2:map.dt 是一个数据表,其中列名是 c("chr","re​​f","pat","mat")。

问题是在数据表中我无法按名称访问给定列,或者至少我不知道如何访问。

如果您有什么建议,请告诉我!

谢谢!

【问题讨论】:

  • 您能否提供示例数据/可重现的示例(在这种情况下,针对对象map.dt)?
  • @Frank,我刚刚添加了一个简短的 map.dt 示例,谢谢!

标签: r dataframe data.table


【解决方案1】:

这里的最终目标有点不清楚,尤其是在没有示例数据的情况下,但是如果您想按字符名称访问行,有两种方法可以做到这一点:

Columns = c("A", "B")
# .. means "look up one level"
dt[,..Columns]

dt[,get("A")]
dt[,list(get("A"), get("B"))]

但如果您发现自己需要经常使用这种技术,那么您可能使用 data.table 很糟糕。

编辑

根据您的编辑,此行将返回相同的结果,无需进行任何as.data.frame 转换:

> map.dt[chr==chrom & get(parent) > 0, get(parent)]

【讨论】:

  • 还有eval-parse路由:stackoverflow.com/questions/10675182/…
  • @SEnorO 谢谢!我刚刚添加了 map.dt 的示例。
  • @SenorO,谢谢,问题是我需要将它们作为一个角色来访问,它并不总是 mat 或 pat,它会改变。我做了 map.dt[chr == chrom & map.dt[,get(parent)] > 0,get(parent)];并且它有效,但我很想知道为什么你认为它不能很好地使用数据表......
  • @SenorO 我刚刚在Q中添加了一个关于父动态分配的注释。
  • 我不认为使用 data.table 不好 - 我认为如果你发现自己一直这样做,这表明你可能没有很好地使用 data.table
猜你喜欢
  • 1970-01-01
  • 2017-11-30
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多