gpt4 book ai didi

r - 使用 reshape 查找配对事件

转载 作者:行者123 更新时间:2023-12-04 10:10:24 25 4
gpt4 key购买 nike

我有一个用户和他们在特定时间购买的元素的列表,我想从原始数据中生成这些对的列表。虽然我可以并且可能会编写一个小的 Python 脚本来执行此操作,但我有一种烦人的感觉,即 reshape(或更可能是 reshape2)包可以在几行内完成。

在代码中,我希望将下面的 df 数据框转换为 resdf 数据框:

df <- data.frame(user=c("u1","u2","u1","u3","u2","u4","u5","u4"),
item=c("i1","i1","i2","i3","i2","i3","i3","i4"),
time=c(1,1,2,3,4,4,5,6))
> df
user item time
1 u1 i1 1
2 u2 i1 1
3 u1 i2 2
4 u3 i3 3
5 u2 i2 4
6 u4 i3 4
7 u5 i3 5
8 u4 i4 6
>

### some reshape code here

resdf <- data.frame(user=c("u1","u2","u4"),
item1=c("i1","i1","i3"),
item2=c("i2","i2","i4"),
time=c(1,1,4),
delt=c(1,3,2))
> pdf
user item1 item2 time delt
1 u1 i1 i2 1 1
2 u2 i1 i2 1 3
3 u4 i3 i4 4 2

是否有任何 reshape 向导可以帮助我解决这个问题?

最佳答案

如果您将具有重复 user 值的行合并回没有重复值的行,您将获得所需的信息,然后稍作按摩即可获得所需的排列:

> merge(df[!duplicated(df$user), ], df[duplicated(df$user), ], by="user")
user item.x time.x item.y time.y
1 u1 i1 1 i2 2
2 u2 i1 1 i2 4
3 u4 i3 4 i4 6
> inter <- merge(df[!duplicated(df$user), ], df[duplicated(df$user), ], by="user")
> inter$delt <- inter$time.y-inter$time.x
> inter[ , c(1,2,4,3,6)]
user item.x item.y time.x delt
1 u1 i1 i2 1 1
2 u2 i1 i2 1 3
3 u4 i3 i4 4 2

关于r - 使用 reshape 查找配对事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388702/

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