【发布时间】:2014-02-12 01:18:07
【问题描述】:
假设我想逐行计算几列范围的大小。
set.seed(1)
dat <- data.frame(x=sample(1:1000,1000),
y=sample(1:1000,1000),
z=sample(1:1000,1000))
使用 data.frame(),我会做这样的事情:
dat$diff_range <- apply(dat,1,function(x) diff(range(x)))
更简单地说,我正在寻找这个操作,在每一行上:
diff(range(dat[1,]) # for i 1:nrow(dat)
如果我对整个表都这样做,它会是这样的:
setDT(dat)[,diff_range := apply(dat,1,function(x) diff(range(x)))]
但是我将如何仅对命名(或编号)行执行此操作?
【问题讨论】:
-
这个问题听起来您想做的只是对数据框或数据表进行子集化,但根据您的个人资料,您已经知道如何做到这一点。您实际上想在这里实现什么目标?
-
我想我的印象是我可以在
apply()表达式中使用类似于 data.table 引用列的符号。这符合我的预期:dt[,diff_range := apply(dt[,1:2,with=FALSE]...,但我认为我可以做一些魔法:apply(1:2, ...)。我想我在这里回答了我自己的问题。 -
哦,是的,您可以,但不能以这种方式使用数据表,因为它会更改 dt 而不是制作副本。我用我最常用的方式添加了一个答案
%in%
标签: r data.table