【发布时间】:2013-06-04 14:06:23
【问题描述】:
假设我有一个 data.table
set.seed(1) # to make the example reproducible
ex<-data.table(AAA=runif(100000),
BBB=runif(100000),
CCC=runif(100000),
DDD=runif(100000),
FLAG=c(rep(c("a","b","c","d","e"),200000)))
我想从AAA 列中减去每隔一列,然后从BBB 中减去每一列(FLAG 除外),依此类推,以使输出看起来像...
ex[,list(AAA_BBB=AAA-BBB,
AAA_CCC=AAA-CCC,
AAA_DDD=AAA-DDD,
BBB_CCC=BBB-CCC,
BBB_DDD=BBB-DDD,
CCC_DDD=CCC-DDD)]
是否有一个 data.table 语法可以在不知道有多少列或它们的名称是什么的情况下干净地做到这一点?
【问题讨论】:
-
在您的示例中处理 1000000 行并不是很有趣。您的问题中没有提到效率……这是一个问题吗?无论如何,我只尝试了十行的答案。
-
@Frank 我相信,如果使用 data.table,则几乎暗示了对效率的需求。
-
@Frank 对示例中的行过多感到抱歉,我刚刚复制粘贴了一个先前的问题,我询问了与示例相关的大量行。
-
啊,没问题。我的解决方案既低效又冗长。我不知道这个不错的
combn函数,如果没有你的大示例数据,我也不会意识到它有多好。 :) 另外,Roland 是对的:我应该假设 data.table 问题与效率有关。
标签: r data.table