gpt4 book ai didi

r - “unpacking” data.frame中的因子列表

转载 作者:行者123 更新时间:2023-12-04 13:20:05 26 4
gpt4 key购买 nike

我是R的新手,可以轻松地重新组织数据,并四处寻找解决方案,但找不到我想要做的事情。 Reshape2的融化/浇铸似乎不太奏效,我还没有很好地掌握plyr,因此无法将其纳入其中。

基本上,我有一个data.frame,其结构如下所述,其中的category列中的每个元素都是可变长度的类别列表(由于#列要大得多,因此更加紧凑,实际上我有多个category_lists喜欢分开放置):

>mydf
ID category_list xval yval
1 ID1 cat1, cat2, cat3 xnum1 ynum1
2 ID2 cat2, cat3 xnum2 ynum2
3 ID3 cat1 xnum3 ynum3

我想使用类别作为因子(以及相关的值,即第3/4列)进行操作,所以我认为最后需要这样的东西,其中ID和x/y/other列值根据类别列表的长度:
       ID           category    xval    yval
1 ID1 cat1 xnum1 ynum1
2 ID1 cat2 xnum1 ynum1
3 ID1 cat3 xnum1 ynum1
4 ID2 cat2 xnum2 ynum2
5 ID2 cat3 xnum2 ynum2
6 ID3 cat3 xnum2 ynum2

如果在category_list上还有其他解决因素/方面的解决方案,那将是一个更简单的解决方案,但我没有遇到支持该问题的方法,
例如以下引发错误
>ggplot(mydf, aes(x=x, y=y)) + geom_point() + facet_grid(~cat_list)

Error in layout_base(data, cols, drop = drop) : At least one layer must contain all variables used for facetting



谢谢!

最佳答案

答案将取决于category_list的格式。如果实际上每行是一个list
就像是

mydf <- data.frame(ID = paste0('ID',1:3), 
category_list = I(list(c('cat1','cat2','cat3'), c('cat2','cat3'), c('cat1'))),
xval = 1:3, yval = 1:3)

或者
library(data.table)
mydf <- as.data.frame(data.table(ID = paste0('ID',1:3),
category_list = list(c('cat1','cat2','cat3'), c('cat2','cat3'), c('cat1')),
xval = 1:3, yval = 1:3) )

然后,您可以使用 plyrmerge创建您的长格式数据
 newdf <- merge(mydf, ddply(mydf, .(ID), summarize, cat_list = unlist(category_list)), by = 'ID')


ID category_list xval yval cat_list
1 ID1 cat1, cat2, cat3 1 1 cat1
2 ID1 cat1, cat2, cat3 1 1 cat2
3 ID1 cat1, cat2, cat3 1 1 cat3
4 ID2 cat2, cat3 2 2 cat2
5 ID2 cat2, cat3 2 2 cat3
6 ID3 cat1 3 3 cat1

或不需要 merge的非plyr方法
 do.call(rbind,lapply(split(mydf, mydf$ID), transform, cat_list = unlist(category_list)))

关于r - “unpacking” data.frame中的因子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14226575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com