gpt4 book ai didi

对 data.table 的行明智操作

转载 作者:行者123 更新时间:2023-12-04 23:02:00 28 4
gpt4 key购买 nike

假设我想逐行计算几列范围的大小。

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)))]

但是我将如何仅对命名(或编号)行执行此操作?

最佳答案

这个怎么样:

D[,list(I=.I,x,y,z)][,diff(range(x,y,z)),by=I][c(1:4,15:18)]
# I V1
#1: 1 971
#2: 2 877
#3: 3 988
#4: 4 241
#5: 15 622
#6: 16 684
#7: 17 971
#8: 18 835

#actually this will be faster
D[c(1:4,15:18),list(I=.I,x,y,z)][,diff(range(x,y,z)),by=I]

使用 .I 给你一个索引,用 by= 调用参数,然后您可以在每一行上运行该函数。第二个调用按任何行号列表进行预过滤,或者如果您的真实表看起来不同,您可以添加一个键并对其进行过滤。

关于对 data.table 的行明智操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21275192/

28 4 0