【问题标题】:Weird conversion from list to dataframe in RR中从列表到数据框的奇怪转换
【发布时间】:2016-02-07 06:34:17
【问题描述】:

我有一个从 for 循环创建的列表,它看起来像这样:

我尝试使用代码将其转换为数据框:

dflist<- as.data.frame(mylist)

但我的数据框现在看起来像这样:

我知道我可能创建了错误的列表,但我认为如果我只需要将数字正确转换为数据框,这仍然是可以挽救的。

我的最终目标是根据他们的索引 (1-30) 绘制数字,我认为首先创建一个数据框来清理它然后绘制会很有帮助。 任何帮助将非常感激。谢谢。

【问题讨论】:

  • 对于未来的问题:不要将您的数据作为图像发布,而是学习如何提供reproducible example。这会让其他人更容易帮助你。
  • 我不知道如何在不发布长代码和附加数据集的情况下重现我所做的事情。
  • 在这种情况下,dput(head(mylist, 10))dflist[, 1:5] 足以解释您的问题。链接的问答中也对此进行了说明。 HTH

标签: r list dataframe type-conversion


【解决方案1】:

显示的数据是list。我们可以使用unlist 并创建一个data.frame。根据 OP 帖子中显示的图像,每个 list 元素的 length 为 1。通过执行 unlist,我们将 list 转换为 vector,然后用 data.frame 包装。

data.frame(ind= seq_along(lst), Col1= as.numeric(unlist(lst)))

或者在命名 list 元素后,另一个选项是 stack

df1 <- transform(stack(setNames(lst, seq_along(lst))),
                 values = as.numeric(values))

它提供了一个两列数据集。由此我们可以做plotting


关于 OP 关于直接在list 上调用as.data.frame 的方法,它的工作方式与调用as.data.frame.list 的方式不同。例如,如果我们对vector 执行as.data.frame,它使用as.data.frame.vector

as.data.frame(1:5)
# 1:5
#1   1
#2   2
#3   3
#4   4
#5   5

但是,如果我们打电话给as.data.frame.list

as.data.frame.list(1:5)
#  X1L X2L X3L X4L X5L
#1   1   2   3   4   5

我们得到一个带有“n”列的data.frame(基于向量的长度)。

假设,我们在 list 上做同样的事情

as.data.frame(as.list(1:5))
#  X1L X2L X3L X4L X5L
#1   1   2   3   4   5

它使用as.data.frame.list。要获取methodsas.data.frame 的完整列表,

methods('as.data.frame')
#[1] as.data.frame.aovproj*        as.data.frame.array          
# [3] as.data.frame.AsIs            as.data.frame.character      
# [5] as.data.frame.chron*          as.data.frame.complex        
# [7] as.data.frame.data.frame      as.data.frame.data.table*    
# [9] as.data.frame.Date            as.data.frame.dates*         
#[11] as.data.frame.default         as.data.frame.difftime       
#[13] as.data.frame.factor          as.data.frame.ftable*        
#[15] as.data.frame.function*       as.data.frame.grouped_df*    
#[17] as.data.frame.idf*            as.data.frame.integer        
#[19] as.data.frame.ITime*          as.data.frame.list      <-------     
#[21] as.data.frame.logical         as.data.frame.logLik*        
#[23] as.data.frame.matrix          as.data.frame.model.matrix   
#[25] as.data.frame.noquote         as.data.frame.numeric        
#[27] as.data.frame.numeric_version as.data.frame.ordered        
#[29] as.data.frame.POSIXct         as.data.frame.POSIXlt        
#[31] as.data.frame.raw             as.data.frame.rowwise_df*    
#[33] as.data.frame.table           as.data.frame.tbl_cube*      
#[35] as.data.frame.tbl_df*         as.data.frame.tbl_dt*        
#[37] as.data.frame.tbl_sql*        as.data.frame.times*         
#[39] as.data.frame.ts              as.data.frame.vector  

【讨论】:

  • 谢谢!我使用了涉及堆栈的第二个选项,它按照我的需要工作。非常详尽的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多