【问题标题】:Return a value from vectors in a list using only column names仅使用列名从列表中的向量返回值
【发布时间】:2021-09-13 23:54:59
【问题描述】:

考虑以下列表。 这个列表(在本例中命名为“list1”)包含三个命名向量“A”、“B”和“C”。这些向量中的每一个都有两列,它们总是被命名为“一”和“二”:

> list1
$A
     one      two 
2005.015 1339.938 

$B
      one       two 
1.0000075 0.1815634 

$C
          one           two 
-66264.148352     -2.868802 

假设我想从向量“B”中获取“二”列的值。我知道如何做到这一点的三种方法:

list1[[2]][[2]]
list1$B[[2]]
list1[[2]]$two

但是,这不是获得该值的方法:

list1$B$two

有没有办法只使用列名而不是列索引来获取这个值?

【问题讨论】:

  • 如果您认为我对那些不是框架的内容不正确,请edit 您的问题并粘贴来自dput(nested_df) 的输出(就像我在回答中所做的那样)。谢谢!
  • 您对它们是列表的看法是对的,我编辑了我的问题以遵循您使用的术语。
  • 它仍然不是嵌套列表,只是一个带有向量的列表。在 R 中,向量和列表之间存在差异,如何按名称对其进行子集化就是其中之一。
  • 注意到并添加到问题中 - 对命名混乱感到抱歉。在我的脑海中,我对待所有这些事情的方式都非常相似。
  • 每种编程语言对列表/向量/表格/帧/数组/矩阵的处理方式略有不同,学习新语言的部分挑战是了解新语言与您的理解和假设有何不同。跨度>

标签: r list vector nested


【解决方案1】:

那些似乎不是嵌套的框架,也不是框架:它似乎是命名数字向量的list。以下是我怀疑的数据:

nested_df <- list(A=c(one=1,two=2), B=c(one=11,two=12), C=c(one=21,two=22))
nested_df
# $A
# one two 
#   1   2 
# $B
# one two 
#  11  12 
# $C
# one two 
#  21  22 

因此,您可以使用

nested_df$B["two"]
# two 
#  12 

原始数据:

nested_df <- list(A = c(one = 1, two = 2), B = c(one = 11, two = 12), C = c(one = 21, two = 22))

【讨论】:

    【解决方案2】:

    我们可以将列表中的向量转换为 data.frame 或列表。

    lst <- list(A = c(one = 2005.015, two = 1339.938),
                B = c(one = 1.0000075, two = 0.1815634),
                C = c(one = -66264.148352 , two = -2.868802))
    
    lst <- lapply(lst, function(.x) data.frame(A = .x[[1]], B = .x[[2]]))
    
    lst$A$A
    #> [1] 2005.015
    lst$B$A
    #> [1] 1.000007
    
    lst <- lapply(lst, function(.x) list(A = .x[[1]], B = .x[[2]]))
    
    lst$A$A
    #> [1] 2005.015
    

    reprex package (v2.0.0) 于 2021-07-01 创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2014-09-24
      相关资源
      最近更新 更多