【问题标题】:extracting values from a list created by split() function从 split() 函数创建的列表中提取值
【发布时间】:2013-03-26 13:43:40
【问题描述】:

我有一个如下表格的列表,大约 1400 个字符。我想从每个日期/时间中提取值以绘制它们。

$`2012-07-19 22:30:00`
[1] NaN

$`2012-07-19 23:00:00`
[1] 23.91

$`2012-07-19 23:30:00`
[1] 23.83286

我尝试了几种不同形式的 sapply 函数,这些函数是我在网上找到的,但每次都得到相同的列表(如下),但我无法绘制。如果我可以提取这些值,我应该可以使用 na.omit 删除“NaN”。关于如何做到这一点的任何想法?

2012-07-19 22:30:00 2012-07-19 23:00:00 2012-07-19 23:30:00 
                NaN            23.91000            23.83286 

此外,有谁知道如何找出每个日期的列表中有多少个值? 我很感激任何建议。

【问题讨论】:

  • 您能否通过复制/粘贴一些数据来使您的示例可重现?您可以为此使用dput(head())
  • 列表中的每个元素只有一个值。为什么不用as.data.frame(.) 或简单的unlist 包装它?
  • 你试过unlist()length()?以及为什么不能绘图(打印哪个错误消息)?

标签: r list split extract


【解决方案1】:

有很多选择:

  • stack(也适用于列表中不相等的元素)

    L <- list(a=1, b=2, c=3)
    stack(L)
    #   values ind
    # 1      1   a
    # 2      2   b
    # 3      3   c
    
    L <- list(a=1, b=2, c=c(3,4))
    stack(L)
    #   values ind
    # 1      1   a
    # 2      2   b
    # 3      3   c
    # 4      4   c
    

要仅绘制值,您可以执行plot(stack(L)$values)

  • unlist(也适用于不相等的列表元素,名称会相应更改)

    L <- list(a=1, b=2, c=3)
    unlist(L)
    # a b c 
    # 1 2 3 
    
    unname(unlist(L))            ## using unname to remove the names
    # 1 2 3 
    
    L <- list(a=1, b=2, c=c(3,4))
    unlist(L)
    # a b c1 c2                  ## note the automatic name assignment here
    # 1 2  3  4
    

要绘制,你可以这样做:plot(unlist(L))(或)等效地plot(unname(unlist(L)))

  • as.data.frame(如果元素不相等,值会被回收,小心!)。这在这里没有多大用处(如果你必须绘制,至少不是直截了当的,就像你的情况一样)。

    L <- list(a=1, b=2, c=3)
    as.data.frame(L)
    #   a b c
    # 1 1 2 3
    
    L <- list(a=1, b=2, c=c(3,4))
    as.data.frame(L)
    #   a b c
    # 1 1 2 3
    # 1 1 2 4
    

【讨论】:

  • 感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2014-08-26
  • 1970-01-01
相关资源
最近更新 更多