【问题标题】:Indexing the first column of a dataframe within a list of dataframes to set decimal places在数据帧列表中索引数据帧的第一列以设置小数位
【发布时间】:2021-09-09 13:33:34
【问题描述】:

我有一个数据框列表,下面是一小部分

list(Al2O3 = structure(list(Determination_No = c(1, 2, 3, 4, 
5, 6, 7, 8, 9, 10), `2` = c(2.04, 2.07, 2.05, 2.07, 2.1, 2.08, 
NA, NA, NA, NA), `3` = c(2.08, 2.1, 2.08, 2.13, 2.1, 2.08, NA, 
NA, NA, NA), `4` = c(2.08, 2.08, 2.09, 2.06, 2.08, 2.07, 2.07, 
2.06, 2.08, 2.08), `5` = c(2.11, 2.09, 2.1, 2.08, 2.09, 2.09, 
NA, NA, NA, NA), `6` = c(2.12, 2.1, 2.1, 2.11, 2.1, 2.11, NA, 
NA, NA, NA), `7` = c(2.06, 2.05, 2.04, 2.05, 2.04, 2.03, NA, 
NA, NA, NA), `8` = c(2.078, 2.065, 2.057, 2.063, 2.067, 2.066, 
NA, NA, NA, NA), `10` = c(2.191776681, 2.153987428, 2.153987428, 
2.097303548, 2.116198175, 2.116198175, NA, NA, NA, NA), `12` = c(2.24, 
2.08, 2.12, 2.15, 2.15, 2.15, NA, NA, NA, NA), `36` = c(2.07, 
2.082, 2.048, 2.046, 2.086, 2.069, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-10L)), As = structure(list(Determination_No = c(1, 2, 3, 4, 
5, 6, 7, 8, 9, 10), `2` = c(0.002, 0.001, 0.001, 0.001, 0.002, 
0.001, NA, NA, NA, NA), `3` = c(0.003, 0.002, 0.002, 0.002, 0.001, 
0.002, NA, NA, NA, NA), `4` = c(0.001, 0.002, 0.001, 0.002, 0.002, 
0.002, 0.001, 0.002, 0.002, 0.003), `5` = c(0.002, 0.001, 0.001, 
0.001, 0.001, 0.002, NA, NA, NA, NA), `6` = c(NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_), `7` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), `8` = c(NA, 
0.001, NA, NA, NA, NA, NA, NA, NA, NA), `10` = c(NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_), `12` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), `36` = c(0.0053, 
0.0053, 0.0053, 0.00454, 0.0053, 0.0053, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-10L)), Ba = structure(list(Determination_No = c(1, 2, 3, 4, 
5, 6, 7, 8, 9, 10), `2` = c(NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), 
    `3` = c(NA, NA, NA, NA, 0.001, NA, NA, NA, NA, NA), `4` = c(0.004, 
    0.003, 0.003, 0.004, 0.003, 0.002, 0.004, 0.002, 0.005, NA
    ), `5` = c(NA, NA, NA, NA, NA, 0.003, NA, NA, NA, NA), `6` = c(NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_), `7` = c(NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_), `8` = c(0.002, 0.003, NA, NA, NA, 0.002, 
    NA, NA, NA, NA), `10` = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_
    ), `12` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), `36` = c(0.00089566, 
    0.00089566, 0.00089566, 0.00089566, 0.00089566, 0.00089566, 
    NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-10L)))

我有以下函数来控制应用某些舍入规则

AnalyteDecList <- c("Al2O3", "As", "Ba")

decimlist <- data.frame(analytes = AnalyteDecList,
                        value.dec = c(2,3,3),
                        sd.Dec = c(3,4,4))


dataDecimal <- function(x,value.dec,...){
  x <- format(round(x,digits = value.dec),nsmall = value.dec)
  return(x)
}

df <-  Map(dataDecimal, df [decimlist$analytes], decimlist$value.dec)

这会产生我想要的结果,但是,它还将舍入函数应用于数据帧列表中每个数据帧的第一列,这不是必需的。如何让我的函数排除每个数据框中的第一列?

谢谢

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您可以将函数更改为使用x[-1] 以避免将format 应用于第一列。

    dataDecimal <- function(x,value.dec,...){
      x[-1] <- format(round(x[-1],digits = value.dec),nsmall = value.dec)
      return(x)
    }
    
    df <-  Map(dataDecimal, df[decimlist$analytes], decimlist$value.dec)
    df
    
    #$Al2O3
    #   Determination_No    2    3    4    5    6    7    8   10   12   36
    #1                 1 2.04 2.08 2.08 2.11 2.12 2.06 2.08 2.19 2.24 2.07
    #2                 2 2.07 2.10 2.08 2.09 2.10 2.05 2.06 2.15 2.08 2.08
    #3                 3 2.05 2.08 2.09 2.10 2.10 2.04 2.06 2.15 2.12 2.05
    #4                 4 2.07 2.13 2.06 2.08 2.11 2.05 2.06 2.10 2.15 2.05
    #5                 5 2.10 2.10 2.08 2.09 2.10 2.04 2.07 2.12 2.15 2.09
    #6                 6 2.08 2.08 2.07 2.09 2.11 2.03 2.07 2.12 2.15 2.07
    #7                 7   NA   NA 2.07   NA   NA   NA   NA   NA   NA   NA
    #8                 8   NA   NA 2.06   NA   NA   NA   NA   NA   NA   NA
    #9                 9   NA   NA 2.08   NA   NA   NA   NA   NA   NA   NA
    #10               10   NA   NA 2.08   NA   NA   NA   NA   NA   NA   NA
    #...
    #...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-29
      • 2021-09-26
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2020-04-04
      • 2021-08-18
      • 2020-09-07
      相关资源
      最近更新 更多