【问题标题】:How to use a statistic function and subsetting data simultaneously in R?如何在 R 中同时使用统计函数和子集数据?
【发布时间】:2018-03-04 06:18:49
【问题描述】:

我的数据看起来像这样 (dat)

region muscle    protein
head   cerebrum  78
head   cerebrum  56
head   petiole   1
head   petiole   2
tail   pectoral  3
tail   pectoral  4

我想取cerebrum 的蛋白质值的平均值。我试图寻找不同的方法来对数据进行子集herehere。但似乎没有一种直接的方法来做到这一点。现在,我正在这样做:

datcerebrum <- dat[which(dat$muscle == "cerebrum"),]
mean(datcerebrum$protein)

我试着浓缩这一行:

mean(dat[which(dat$muscle == "cerebrum"),])

但它会抛出一个 NA 并警告参数不是数字或逻辑。有没有简单的方法来实现这一点?

【问题讨论】:

    标签: r subset mean


    【解决方案1】:

    我们可以从base R使用aggregate

    aggregate(protein ~muscle, dat, mean)
    #   muscle protein
    #1 cerebrum    67.0
    #2 pectoral     3.5
    #3  petiole     1.5
    

    【讨论】:

      【解决方案2】:

      我会使用 tidyverse 包 dplyr 来做到这一点:

      library(readr)
      library(dplyr)
      fwf <- "head   cerebrum  78
      head   cerebrum  56
      head   petiole   1
      head   petiole   2
      tail   pectoral  3
      tail   pectoral  4"
      dat <- read_fwf(fwf, fwf_empty(fwf, col_names = c("region", "muscle", "protein")))
      # The above code is just to create your data frame - please provide reproducible data!
      
      dat %>% filter(muscle == "cerebrum") %>% summarise(m = mean(protein))
      #> # A tibble: 1 x 1
      #>       m
      #>   <dbl>
      #> 1    67
      

      你甚至可以同时锻炼每一块肌肉:

      dat %>% group_by(muscle) %>% summarise(m = mean(protein))
      #> # A tibble: 3 x 2
      #>     muscle     m
      #>      <chr> <dbl>
      #> 1 cerebrum  67.0
      #> 2 pectoral   3.5
      #> 3  petiole   1.5
      

      【讨论】:

        【解决方案3】:

        使用data.table的解决方案:

        # Load required library
        library(data.table)
        # Transform you data into a data.table object
        setDT(dat)
        # Subset cerebrum and mean protein values
        data[muscle == "cerebrum"][, mean(protein)]
        

        【讨论】:

          猜你喜欢
          • 2021-09-05
          • 2017-12-24
          • 2018-04-12
          • 2013-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多