美文网首页
split+lapply组合

split+lapply组合

作者: 鱼啸九天 | 来源:发表于2020-03-15 11:28 被阅读0次

    学习了R一段时间,感觉R做的应该是批量,虽然有for循环,apply等函数,但感觉split+lapply组合好理解一些。
    split()所做的是接收一个向量或对象x,然后接收一个因子变量f,f用来指定分组的水平(level),x根据f进行分组,分组之后返回一个列表,我们就可以对这些独立的组使用lapply()。

    生成三组随机数,然后通过split()进行分组,因子变量设置为3,将x向量分解成3组。
    x <- c(rnorm(10), runif(10),rnorm(10,1))
    f<- gl(3,10)
    split(x,f)
    $`1`
     [1]  0.31205453 -0.05808672  0.08195985  1.02003807  1.67009113 -0.34806748  1.31506783
     [8]  3.91626875 -1.30482693  1.80152419
    
    $`2`
     [1] 0.33053769 0.95732387 0.41466116 0.08654552 0.85751283 0.38291069 0.87297021
     [8] 0.44570715 0.47098875 0.45451860
    
    $`3`
     [1]  0.0470334  1.1493512  1.5868259  1.2923148  0.2084253  1.2322888  1.8852816
     [8]  2.0504138 -0.5446027  1.7317540
    

    分组之后使用循环函数lapply求每个组中的统计值

    lapply(split(x,f),mean)
    $`1`
    [1] 0.8406023
    
    $`2`
    [1] 0.5273676
    
    $`3`
    [1] 1.063909
    

    当然,组合在实际中应用最多的还是数据框,以datasets数据集中的空气质量(airquality)数据集为例,可以看到数据集中包含臭氧、太阳辐射、风力、温度等测量值,以及月份、日期两个测量时间。

    library(datasets)
    head(airquality)
      Ozone Solar.R Wind Temp Month Day
    1    41     190  7.4   67     5   1
    2    36     118  8.0   72     5   2
    3    12     149 12.6   74     5   3
    4    18     313 11.5   62     5   4
    5    NA      NA 14.3   56     5   5
    6    28      NA 14.9   66     5   6
    

    如果想计算臭氧、辐射、风力、温度等测量值在某个月份内的平均值,那就要先使用split对数据进行分类:首先将整个数据框按月分组。然后在进行批量处理。

    s <- split(airquality, airquality$Month)
    lapply(s, function(x) {colMeans(x[, c("Ozone", "Solar.R", "Wind")])})
    $`5`
       Ozone  Solar.R     Wind 
          NA       NA 11.62258 
    
    $`6`
        Ozone   Solar.R      Wind 
           NA 190.16667  10.26667 
    
    $`7`
         Ozone    Solar.R       Wind 
            NA 216.483871   8.941935 
    
    $`8`
       Ozone  Solar.R     Wind 
          NA       NA 8.793548 
    
    $`9`
       Ozone  Solar.R     Wind 
          NA 167.4333  10.1800
    

    相关文章

      网友评论

          本文标题:split+lapply组合

          本文链接:https://www.haomeiwen.com/subject/okgqehtx.html