如何将此数据框(超过 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
我有一个数据框包含:
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