gpt4 book ai didi

R数据表: use function on group except current row

转载 作者:行者123 更新时间:2023-12-04 11:09:14 26 4
gpt4 key购买 nike

假设我有:

x = data.table( id=c(1,1,1,2,2,2), price=c(100,110,120,200,200,220) )
> x
id price
1: 1 100
2: 1 110
3: 1 120
4: 2 200
5: 2 200
6: 2 220

并希望在当前行被省略后为每一行查找组中最便宜的价格 (by=id)。所以结果应该是这样的:

> x
id price cheapest_in_this_id_omitting_current_row
1: 1 100 110 # if I take this row out the cheapest is the next row
2: 1 110 100 # row 1
3: 1 120 100 # row 1
4: 2 200 200 # row 5
5: 2 200 200 # row 4 (or 5)
6: 2 220 200 # row 4 (or 5)

所以它就像使用:

x[, cheapest_by_id := min(price), id]

但是删除每个计算的当前行

如果我可以有一个变量来引用组内的当前行,比如 .row_nb,我会使用:

x[, min(price[-.row_nb]), id]

但是这个 .row_nb 似乎不存在...?

最佳答案

我们按'id'分组,在行的序列上使用combn,指定要选择的元素数,即'm'比行数少1(.N -1),使用 combn 的输出作为数字索引来对 'price' 进行子集化,得到 min 并赋值 (:=) 将输出作为新列。

 x[,  cheapest_in_this_id_omitting_current_row:= 
combn(.N:1, .N-1, FUN=function(i) min(price[i])), by = id]
x
# id price cheapest_in_this_id_omitting_current_row
#1: 1 100 110
#2: 1 110 100
#3: 1 120 100
#4: 2 200 200
#5: 2 200 200
#6: 2 220 200

或者不使用combn,我们可以遍历序列,用它来索引'price',得到mean。我想这会很快。

 x[,cheapest_in_this_id_omitting_current_row:=
unlist(lapply(1:.N, function(i) min(price[-i]))) , id]

关于R数据表: use function on group except current row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com