【问题标题】:How To Dynamically Access Specific Attribute In A List of Data Frames如何动态访问数据框列表中的特定属性
【发布时间】:2019-02-11 03:26:26
【问题描述】:

我有一个数据框列表。我正在尝试访问列表中每个数据框内的特定属性。可以使用以下代码提取特定属性DP.UniqueId

> attr(new_data$A$AA, "SpotfireColumnMetaData")$DP.UniqueId
[1] "A-024"

这种方法的问题在于它不是动态的。此外,我拥有的大数据列表中有数千个数据框,对于每个数据框,我都想提取这个特定的DP.UniqueId 属性。

如果我必须应用 lapply()for loop() 来动态获取此属性,那么我必须将其引用为:

> attr(new_data[1][1], "SpotfireColumnMetaData")$DP.UniqueId
NULL

但它看起来像在Rattr() 不能像上面的代码那样被引用。有没有办法动态提取特定属性并将其存储在数据框中?

数据

new_data <- list(A = structure(list(AA = structure(5.49485, SpotfireColumnMetaData = list(
  DP.TestNumber = "111", DP.Type = "", DP.TestName = "ABC", 
  DP.Info = "PTR", DP.TestUnit = "Mohm", DP.Statistic = "raw", 
  DP.Program = "", DP.ScaleFactor = 0L, DP.FilteredOutCells = 0L, 
  Limits.Prod.Lower = 2, Limits.Prod.Target = NaN, Limits.Prod.Upper = 7, 
  Limits.Spec.Lower = -Inf, Limits.Spec.Target = NaN, Limits.Spec.Upper = Inf, 
  Limits.Outlier.Lower = -Inf, Limits.Outlier.Target = NaN, 
  Limits.Outlier.Upper = Inf, Limits.Whatif.Lower = -Inf, Limits.Whatif.Target = NaN, 
  Limits.Whatif.Upper = Inf, DP.ParamType = "PARAMETRIC", DP.BlockId = "", 
  DP.Scratch = "", DP.ColumnId = "", Dp.BaseName = "", DP.FTR.testtxt = "", 
  DP.PTR.testtxt = "A  -1 <> B", DP.DTR.textdat = "", 
  DP.MPR.pinnum = "0", DP.UniqueId = "A-024"))), class = "data.frame", row.names = c(NA,-1L)),
  B = structure(list(BB = structure(0.08707662, SpotfireColumnMetaData = list(
  DP.TestNumber = "112", DP.Type = "", DP.TestName = "ABC", 
DP.Info = "PTR", DP.TestUnit = "Mohm", DP.Statistic = "raw", 
DP.Program = "", DP.ScaleFactor = 0L, DP.FilteredOutCells = 0L, 
Limits.Prod.Lower = 2, Limits.Prod.Target = NaN, Limits.Prod.Upper = 7, 
Limits.Spec.Lower = -Inf, Limits.Spec.Target = NaN, Limits.Spec.Upper = Inf, 
Limits.Outlier.Lower = -Inf, Limits.Outlier.Target = NaN, 
Limits.Outlier.Upper = Inf, Limits.Whatif.Lower = -Inf, Limits.Whatif.Target = NaN, 
Limits.Whatif.Upper = Inf, DP.ParamType = "PARAMETRIC", DP.BlockId = "", 
DP.Scratch = "", DP.ColumnId = "", Dp.BaseName = "", DP.FTR.testtxt = "", 
DP.PTR.testtxt = "A  -1 <> B", DP.DTR.textdat = "", 
DP.MPR.pinnum = "0", DP.UniqueId = "B-025"))), class = "data.frame", row.names = c(NA,-1L)))

【问题讨论】:

    标签: r list dataframe attributes


    【解决方案1】:

    您似乎可以使用purrr 包轻松完成此操作。例如

    library(purrr)
    new_data %>% map(pluck, 1, attr_getter("SpotfireColumnMetaData"), "DP.UniqueId")
    # $A
    # [1] "A-024"
    # $B
    # [1] "B-025"
    

    map() 将遍历初始列表,然后pluck() 可以处理深度提取。

    【讨论】:

    • .@MrFlick - 谢谢。是否可以将这些 ID 分配为列表中各个数据框的第一行?
    • 不确定您的确切意思。这是一个不同的问题吗?
    • .@MrFlick - 是的。我忘了把它写在问题中。请检查更新。关于我第一次问的问题,您的回答是正确的。
    • 你真的不应该在回答问题后更改问题。你应该问一个新问题。基本上你在问一些不同的问题:基本上如何向列表中的每个 data.frame 添加新行。
    • .@MrFlick - 我同意。请检查此question。我避免提出新问题,以确保我在何时可以提出下一个问题时不受 StackOverflow 的限制。即使给出了很好的可重复示例,我也没有投票(即使问题已经得到回答),这会触发 StackOverflow 的算法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多