我有一个R data.table,如下表所示
User_ID Exec_No Job_No
1: 2 1 1
2: 2 2 2
3: 3 2 3
4: 1 2 4
5: 1 1 5
6: 3 2 6
7: 2 2 7
8: 1 1 8
现在,对于(User_ID,Exec_No)的不同组合,我需要一个属于该类别的所有Job_No的向量。
list (
list(User_ID = 2, Exec_No = 1, Job_Nos = c(1)) ,
list(User_ID = 2, Exec_No = 2, Job_Nos = c(2,7)) ,
list(User_ID =3, Exec_No = 2, Job_Nos = c(3,6)) ,
list(User_ID =1, Exec_No = 2, Job_Nos = c(4)) ,
list(User_ID =1, Exec_No = 1, Job_Nos = c(5,8))
)
我希望操作的输出是列表列表。
考虑到输入data.table将有大约50万行,我如何快速在R中实现这一点?
答案 0 :(得分:4)
你走了:
dt = data.table(user.id = c(2,2,3,1,1,3,2,1), exec.no = c(1,2,2,2,1,2,2,1), job.no = c(1:8))
dt[, list(result = list(list(user.id = user.id,
exec.no = exec.no,
job.nos = job.no))),
by = list(user.id, exec.no)][, result]
答案 1 :(得分:3)
你冷酷地使用plyr
,虽然我觉得你的需求会有点慢。要返回您最初粘贴的内容,可以使用ddply
...
ddply( DT , .(User_ID,Exec_No) , summarise , "Job_Nos" = list(Job_No) )
# User_ID Exec_No Job_Nos
#1 1 1 5, 8
#2 1 2 4
#3 2 1 1
#4 2 2 2, 7
#5 3 2 3, 6
或者结果列表如何关于dlply ...
dlply( DT , .(User_ID,Exec_No) , summarise , "User" = User_ID , "Exec" = Exec_No , "Job_Nos" = unique(Job_No) )
#$`1.1`
# User Exec Job_Nos
#1 1 1 5
#2 1 1 8
#$`1.2`
# User Exec Job_Nos
#1 1 2 4
#$`2.1`
# User Exec Job_Nos
#1 2 1 1
#$`2.2`
# User Exec Job_Nos
#1 2 2 2
#2 2 2 7
#$`3.2`
# User Exec Job_Nos
#1 3 2 3
#2 3 2 6
答案 2 :(得分:1)
我认为你所寻找的是这样的,但同样很难从这个问题中得知:
setkey(DT, "User_ID", "Exec_No")
getJobNo <- function(U, E)
DT[.(U, E)][, unlist(Job_No)]
getJobNo(3, 2)