【问题标题】:R: how do I programmatically loop through a split data frameR:我如何以编程方式循环通过拆分数据帧
【发布时间】:2014-03-12 12:36:20
【问题描述】:

我有一个数据集,其中一系列批次的数据按列顺序存储,并且为每个批次(也按顺序)给出多个参数。该文件如下所示:

LotID,Param,Nominal,Value
R0001,Len,1.2500,1.234
R0001,Dia,2.0000,1.979
R0002,Len,1.2500,1.252
R0002,Dia,2.0000,2.010

我可以通过将数据导入数据框、按 LotID 拆分数据框、然后按 Param 再次拆分来深入了解我需要的数据,这很棒。这是我使用的代码:

myCapFull <- read.csv("capabilityFull.csv")
myCapSplit <- split(myCapFull, myCapFull$LotID)
myR0001 <- split(myCapSplit$R0001,myCapSplit$R0001$Param)
myR0001$Dia$Value # Returns 1.979

但是我想要做的是使用 iter 来迭代每个批次的每个参数,但我找不到以编程方式执行此操作的方法。如果我知道 LotID 字段中的所有名称,我就知道如何编写代码,但这对 for/next 循环没有帮助。我有一种感觉,我只是错过了一个非常简单的命令,我花了很多时间搜索但没有找到答案。我是 R 的新手,这真的是我第一次在实际应用中使用它,所以非常感谢任何帮助。

【问题讨论】:

    标签: r split dataframe iteration


    【解决方案1】:

    如果您不知道 LotID 中的值,您可以使用数字索引访问列表中的数据框:

    > myCapSplit[[1]]
      LotID Param Nominal Value
    1 R0001   Len    1.25 1.234
    2 R0001   Dia    2.00 1.979
    > 
    > myCapSplit[[2]]
      LotID Param Nominal Value
    3 R0002   Len    1.25 1.252
    4 R0002   Dia    2.00 2.010
    

    【讨论】:

      【解决方案2】:

      也许您正在寻找subset

      subset(myCapFull, Param=="Dia" & LotID == "R0001")
      #   LotID Param Nominal Value
      # 2 R0001   Dia       2 1.979    
      

      或者,您可以查看[.data.frame 的文档以获取有关如何进行子集化的更多信息,或查看data.tabledplyrplyr 包以按组操作数据帧(即split apply combine analysis) .例如,在这里我们使用data.table 找到所有批次中每个参数的平均值:

      library(data.table)
      DT <- data.table(myCapFull)
      DT[, mean(Value), by=Param]
      #    Param     V1
      # 1:   Len 1.2430
      # 2:   Dia 1.9945
      

      【讨论】:

        猜你喜欢
        • 2021-04-15
        • 2013-07-12
        • 1970-01-01
        • 2017-01-01
        • 1970-01-01
        • 2015-06-15
        • 2020-04-03
        • 2020-07-22
        • 2022-12-15
        相关资源
        最近更新 更多