我整个晚上一直在苦苦思索如何在R中做到这一点.
基本上我有一个如下的数据集:
id<-c(1,1,1,2,2,3,3,3,3)
label<-c('a', 'b', 'c', 'b', 'd', 'a', 'c', 'd', 'e')
mydata<-as.data.frame(cbind(id, label))
mydata$id<-as.integer(as.character(mydata$id))
mydata$label<-as.character(mydata$label)
mydata
id label
1 1 a
2 1 b
3 1 c
4 2 b
5 2 d
6 3 a
7 3 c
8 3 d
9 3 e
Run Code Online (Sandbox Code Playgroud)
我想将mydata转换为mylist,如下所示:
mylist<-list()
mylist[[1]]<-c('a', 'b', 'c')
mylist[[2]]<-c( 'b', 'd')
mylist[[3]]<-c( 'a', 'c', 'd', 'e')
mylist
[[1]]
[1] "a" "b" "c"
[[2]]
[1] "b" "d"
[[3]]
[1] "a" "c" "d" "e"
Run Code Online (Sandbox Code Playgroud)
那么,我如何从mydata到mylist呢?
注意:我的实际数据帧有大约200万行.
[背景:我正在研究多标签分类问题,需要计算F1,精度和召回率,并且需要计算.标签是可变的我以为我可以将它们全部放入一个大清单并按比例进行比较]
看看?split:
split(mydata$label, mydata$id)
#$`1`
#[1] "a" "b" "c"
#
#$`2`
#[1] "b" "d"
#
#$`3`
#[1] "a" "c" "d" "e"
Run Code Online (Sandbox Code Playgroud)