如何将这个数据帧(超过2行)转换为R中的事务



我有一个数据帧,其中包含:

userID song   sex
1      songA  M
2      songB  F
1      songC  M
2      songA  F 
...    ...    ...

因此,每一行都是用户所听歌曲的一个寄存器。我想使用"arules",但首先我需要将此数据帧转换为事务。我找了很多,但实际上我不知道我的想法是否错了,因为我还没有答案。我找到了一些解决方案,比如使用split创建列表,每个用户列出所有歌曲,但如果我这样做,我会丢失性别信息。我只会得到像{songA,songB} -> {songZ}这样的规则。我想生成像{songA,songC,M} -> {songZ}这样的规则(使用性别信息(。我不知道我的想法是否错了,这是不可能的。知道吗?

谢谢。

如果您正在研究关联,您通常希望将数据重新定义为一个长数据帧,其中包含一个ID列和另一个用于二进制项属性的列。

有很多方法可以重塑你的数据以获得正确的形式。在你的例子中,我使用tidyverse进行了重塑,还添加了一个distinct,这样用户的性别就不会被多次陈述。

txt = "
userID song   sex
1      songA  M
2      songB  F
1      songC  M
2      songA  F "
df <- read.table(text = txt, header = TRUE)
library(tidyverse)
df %>%
pivot_longer(cols = c(song, sex)) %>%
distinct()
#> # A tibble: 6 x 3
#>   userID name  value
#>    <int> <chr> <fct>
#> 1      1 song  songA
#> 2      1 sex   M    
#> 3      2 song  songB
#> 4      2 sex   F    
#> 5      1 song  songC
#> 6      2 song  songA

相关内容

  • 没有找到相关文章

最新更新