【问题标题】:how to convert dataframe to list in R by id? [duplicate]如何通过 id 将数据框转换为 R 中的列表? [复制]
【发布时间】:2013-09-24 21:02:18
【问题描述】:

我整个晚上都在努力弄清楚如何在 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

我想将 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"

那么,我该如何从 mydata 到 mylist 呢?

注意:我的实际数据框有大约 200 万行。

[背景:我正在研究一个多标签分类问题,需要计算 F1、精度和召回率,并且作为第一个。标签是可变的,我想我可以将它们全部放入一个大列表中并以这种方式进行比较]

【问题讨论】:

  • 顺便说一句,您可以在一个语句中创建数据框(并且您不需要所有这些转换):mydata &lt;- data.frame(id = c(1,1,1,2,2,3,3,3,3), label = c('a', 'b', 'c', 'b', 'd', 'a', 'c', 'd', 'e'))
  • @dayne:感谢您指出已经回答的问题。在创建这个问题之前,我确实浏览了 SO 推荐的问题,但没有遇到这个问题。
  • @VictorK。谢谢,总是更多地了解 R

标签: r list dataframe


【解决方案1】:

看看?split:

split(mydata$label, mydata$id)
#$`1`
#[1] "a" "b" "c"
#
#$`2`
#[1] "b" "d"
#
#$`3`
#[1] "a" "c" "d" "e"

【讨论】:

  • (+1) 领先我一秒。
  • 非常好,正是我想要的。
猜你喜欢
  • 2018-12-29
  • 1970-01-01
  • 2020-07-29
  • 2021-11-21
  • 2021-02-07
  • 2016-07-24
  • 1970-01-01
  • 2017-07-05
  • 2017-11-29
相关资源
最近更新 更多