如何将此数据框(超过 2 行)转换为 R 中的事务?

How can I transform this dataframe (with more than 2 rows) to a transaction in 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 进行了重塑,还添加了一个不同的字符,这样就不会多次声明用户的性别。

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