gpt4 book ai didi

r - 如何在 R 的 data.frame 中找到下一个事件?

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

假设我们有一个电子邮件数据集,每一行都有一个发件人和一个收件人。我们想要在数据集中找到下一次发件人和收件人互换的事件。因此,如果 sender==x & recipient==y,我们将查找具有 sender==y & recipient==x 的下一行。随后,我们要计算这些观察值之间的差异。请参阅列 diff_count 以获得所需的输出。

# creating the data.frame
id = 1:10
sender = c(1, 2, 3, 2, 3, 1, 2, 1, 2, 3)
recipient = c(2, 1, 2, 3, 1, 2, 3, 3, 1, 1)
count = c(1, 4, 5, 7, 12, 17, 24, 31, 34, 41)
df <- data.frame(id, sender, recipient, count)

# output should look like this
df$diff_count <- c(3, 13, 2, NA, 19, 17, NA, 10, NA, NA)

如果没有更多的观测值满足要求,那么我们就填NA。使用 tidyverse 解决方案应该相对容易,但我似乎无法做到。

最佳答案

另一种 dplyr-没有自定义函数但有几个自连接的方式:

library(dplyr)

data %>%
left_join(data,
by = c("sender" = "recipient", "recipient" = "sender"),
suffix = c("", ".y")) %>%
filter(id < id.y) %>%
group_by(id) %>%
slice_min(id.y) %>%
ungroup() %>%
mutate(diff_count = count.y - count) %>%
right_join(data) %>%
select(-matches("\\.(y|x)")) %>%
arrange(id)

返回

Joining, by = c("id", "sender", "recipient", "count")
# A tibble: 10 x 5
id sender recipient count diff_count
<int> <dbl> <dbl> <dbl> <dbl>
1 1 1 2 1 3
2 2 2 1 4 13
3 3 3 2 5 2
4 4 2 3 7 NA
5 5 3 1 12 19
6 6 1 2 17 17
7 7 2 3 24 NA
8 8 1 3 31 10
9 9 2 1 34 NA
10 10 3 1 41 NA

关于r - 如何在 R 的 data.frame 中找到下一个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68861849/

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