gpt4 book ai didi

r - 选择具有最小绝对差异的重复行观察

转载 作者:行者123 更新时间:2023-12-04 22:54:31 28 4
gpt4 key购买 nike

我有一个这样的数据框:

df <- data.frame(id = c(1,1,1,2,2,3,3,3,3),
vars = c(1,2,5, 1,3, 0,2,4,-1))

> df
id vars
1 1 1
2 1 2
3 1 5
4 2 1
5 2 3
6 3 0
7 3 2
8 3 4
9 3 -1

在这个数据框中每个 id可以有几个观察。
我现在想为每个 id 选择对 vars 具有最小绝对差异的对(2 个观测值) .

在上述情况下,将是
  id vars
1 1 1
2 1 2
3 2 1
4 2 3
5 3 0
6 3 -1

id 1,值 1 和 2 的绝对差值最小, id 2 只有 2 个观测值,因此两个观测值都会被自动选择。
id 3 所选变量将是 0 和 -1,因为绝对差为 1,低于所有其他组合。

最佳答案

您不需要进行所有比较(或者,您可以让 arrange 为您进行比较),因为一旦您对值进行了排序,每个值就已经位于差异最小的值旁边。

df %>% 
group_by(id) %>%
arrange(vars) %>%
slice(which.min(diff(vars)) + 0:1)

# # A tibble: 6 x 2
# # Groups: id [3]
# id vars
# <dbl> <dbl>
# 1 1 1
# 2 1 2
# 3 2 1
# 4 2 3
# 5 3 -1
# 6 3 0

数据表版本
library(data.table)
setDT(df)

df[df[order(vars), .I[which.min(diff(vars)) + 0:1], id]$V1]

# id vars
# 1: 3 -1
# 2: 3 0
# 3: 1 1
# 4: 1 2
# 5: 2 1
# 6: 2 3

关于r - 选择具有最小绝对差异的重复行观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56170674/

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