我有一个看起来像这样的文件(人员ID和产品名称列表)
123 A
123 B
123 D
456 A
456 B
123 C
我想将它与eclat一起转换成这样的东西(每个人购买的产品清单)
list(
c("A", "B", "D", "C"),
c("A", "B" )
)
我能做的最好的事情是将其作为数据框读取,并尝试使用apply函数的变体来制作新的数据结构。
collectValues <- function(obs,map) {
a = obs[1][1]
b = obs[2][1]
if( ! (a %in% map) ) {
map[[a]] <- list(b)
} else {
c(map[[a]], b)
}
}
但我对R来说太新了,无法让它发挥作用......
答案 0 :(得分:1)
我认为你在split
之后就像在:
dat <- read.table(text="123 A
123 B
123 D
456 A
456 B
123 C", header=FALSE, stringsAsFactors = FALSE)
lapply(split(dat[, 2], dat[, 1]), sort)
## $`123`
## [1] "A" "B" "C" "D"
##
## $`456`
## [1] "A" "B"
我将lapply
与sort
一起使用,因为这就是您想要的输出效果,但您可能不需要它。