我有一个数据框:
Partner Col1 Col2 Col3 Col4 Col5
A ab ac ad ed
B ol le
C ef
E ab ol ef at ok
我想将其转换为:
arules
对于某些上下文,我将使用apriori
包将我的数据帧转换为事务类以调用read.transactions
算法。
我想要这样做的方法是转换原始数据帧。将其另存为单独的文件,然后使用$font_f
再次调用它。
任何帮助都会很棒,谢谢!
答案 0 :(得分:1)
你会想要使用dcast。如果您有一个大型数据集,请在data.table中查看dcast。否则,reshape2中的那个将正常工作。
library(reshape2)
df2 = dcast(df, Partner ~ Item, value.var = "Item")
这会给我们
Partner ab ac ad at ed ef le ok ol
1 A ab ac ad <NA> ed <NA> <NA> <NA> <NA>
2 B <NA> <NA> <NA> <NA> <NA> <NA> le <NA> ol
3 C <NA> <NA> <NA> <NA> <NA> ef <NA> <NA> <NA>
4 E ab <NA> <NA> at <NA> ef <NA> ok ol
然后,我们只需要设置列名并用“”
填写NAcolnames = paste("Col",1:length(unique(df$Item)), sep = "")
colnames(df2) = c("Partner",paste("Col",1:length(unique(df$Item)), sep = ""))
df2[is.na(df2)] <- ""
Partner Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9
1 A ab ac ad ed
2 B le ol
3 C ef
4 E ab at ef ok ol
要排序你可以做这样的事情
tmp = df2[, 2:ncol(df2)]
tmp = t(apply(tmp, 1, sort, decreasing = TRUE))
df3 = cbind.data.frame(df2[,1],tmp)
colnames(df3) = c("Partner",paste("Col",1:length(unique(df$Item)), sep = ""))
> df3
Partner Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9
1 A ed ad ac ab
2 B ol le
3 C ef
4 E ol ok ef at ab
可能有更有效的方法。 Apply将DF转换为矩阵进行排序。我不知道如何在不使用它的情况下这样做。