gpt4 book ai didi

r - 按日期和 ID 过滤重复项

转载 作者:行者123 更新时间:2023-12-05 02:19:00 24 4
gpt4 key购买 nike

我有一个如下所示的数据框

Id      Date1        Date2        QuestionId   AnswerValue
10 2000-01-14 2000-01-14 1339 3
10 2000-01-14 1999-12-09 1339 2
10 2000-01-14 1999-11-23 1461 1
10 2000-01-14 2000-01-03 1461 18
10 2000-01-14 1999-11-16 274 0
57 2014-02-01 2014-12-10 278 0
57 2014-02-01 2012-11-07 280 0
57 2014-02-01 2012-09-30 280 0
57 2014-02-01 2012-01-15 261 0

我的目标是根据以下标准保留观察结果。

  1. 保留该 ID 和 QuestionID 组合的行,其中 QuestionID 是唯一的,并且该 ID+QuestionID 组合没有其他重复的 QuestionID。示例:保留最后一行
Id      Date1        Date2        QuestionId   AnswerValue
57 2014-02-01 2012-01-15 261 0
  1. 如果每个 QuestionID+ID 组合都有重复的 QuestionID,则仅保留 Date2 列值最接近 Date1 列值的 QuestionID 行,例如,Id 10 有两个 QuestionID 1339。根据此标准,只有第一行应该被保留是因为问题 ID 1339 的 Date2 值 2000-01-14 与 Date1 值 2000-01-14 相比第二行最接近 Date1 值 2000-01-14,其中 Date2 值为 1999-12-09 与 Date1 值 2000-01- 14.
Id      Date1        Date2        QuestionId   AnswerValue
10 2000-01-14 2000-01-14 1339 3
  1. 删除 Date2 值大于 Date1 的所有行,例如应该删除第 6 行

    Id Date1 Date2 QuestionId AnswerValue57 2014-02-01 2014-12-10 278 0

最终的数据集如下所示。

Id      Date1        Date2        QuestionId   AnswerValue
10 2000-01-14 2000-01-14 1339 3
10 2000-01-14 2000-01-03 1461 18
10 2000-01-14 1999-11-16 274 0
57 2014-02-01 2014-12-10 278 0
57 2014-02-01 2012-11-07 280 0
57 2014-02-01 2012-01-15 261 0

非常感谢任何有助于实现这一目标的帮助。提前致谢。

最佳答案

这是一个使用dplyr的想法,

library(dplyr)

df %>%
group_by(Id, QuestionId) %>%
slice(which.min(difftime(Date1, Date2))) %>%
filter(Date2 <= Date1)

#Source: local data frame [5 x 5]
#Groups: Id, QuestionId [5]

# Id Date1 Date2 QuestionId AnswerValue
# <int> <date> <date> <int> <int>
#1 10 2000-01-14 1999-11-16 274 0
#2 10 2000-01-14 2000-01-14 1339 3
#3 10 2000-01-14 2000-01-03 1461 18
#4 57 2014-02-01 2012-01-15 261 0
#5 57 2014-02-01 2012-11-07 280 0

注意

确保您的日期列设置为 as.Date

关于r - 按日期和 ID 过滤重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43790733/

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