如何比较 R 中不同行的技术重复项?

How to compare technical duplicates on separate rows in R?

我想比较 R 中两个技术重复的均值、标准差和百分比 CV。

目前我的数据框是这样的:

library(tidyverse)

data <- tribble(
  ~rowname, ~Sample, ~Phagocytic_Score,
  1,        1232,    24030,
  2,        1232,    11040,
  3,        4321,    7266,
  4,        4321,    4096,
  5,        5631,    7383,
  6,        5631,    21507
)

reprex package (v0.3.0)

创建于 2019-10-22

所以我想比较第 1 行和第 2 行的值,第 3 行和第 4 行等等。 理想情况下,如果有意义的话,将其存储在一个新的数据框中,只包含平均得分和统计数据。

抱歉,我是 R 的新手,如果这真的很简单,我深表歉意。

谢谢!马里

summarize() 可以准确地给你这个,特别是如果你想要的所有统计数据都是在一个变量定义的组内计算的,即 Sample:

library(raster)
#> Loading required package: sp
library(tidyverse)

data <- tribble(
  ~rowname, ~Sample, ~Phagocytic_Score,
  1,        1232,    24030,
  2,        1232,    11040,
  3,        4321,    7266,
  4,        4321,    4096,
  5,        5631,    7383,
  6,        5631,    21507
)

data %>% 
  group_by(Sample) %>% 
  summarize(
    mean   = mean(Phagocytic_Score),
    sd     = sd(Phagocytic_Score),
    pct_cv = cv(Phagocytic_Score)
  )
#> # A tibble: 3 x 4
#>   Sample  mean    sd pct_cv
#>    <dbl> <dbl> <dbl>  <dbl>
#> 1   1232 17535 9185.   52.4
#> 2   4321  5681 2242.   39.5
#> 3   5631 14445 9987.   69.1

不过,我们有一些重复,不是吗?每个变量都定义为具有相同输入变量的函数调用。 summarize_at()比较合适,那么:

data %>% 
  group_by(Sample) %>% 
  summarize_at("Phagocytic_Score", 
               list(mean = mean, sd = sd, cv = cv))
#> # A tibble: 3 x 4
#>   Sample  mean    sd    cv
#>    <dbl> <dbl> <dbl> <dbl>
#> 1   1232 17535 9185.  52.4
#> 2   4321  5681 2242.  39.5
#> 3   5631 14445 9987.  69.1

啊,不过还有一些需要改进的地方。为什么我们要重复函数的名称作为变量的名称,因为它们是相同的?好吧,mget() 将采用我们想要的函数名称的单个向量,以及 return 这些函数的命名列表,名称为这些函数名称:

data %>% 
  group_by(Sample) %>% 
  summarize_at("Phagocytic_Score", 
               mget(c("mean", "sd", "cv"), inherits = TRUE))
#> # A tibble: 3 x 4
#>   Sample  mean    sd    cv
#>    <dbl> <dbl> <dbl> <dbl>
#> 1   1232 17535 9185.  52.4
#> 2   4321  5681 2242.  39.5
#> 3   5631 14445 9987.  69.1

请注意,我们需要 inherits = TRUE,原因已解释为

reprex package (v0.3.0)

于 2019-10-22 创建

如果我理解你的问题,你希望通过基于其中一列的分组来总结你的数据框。我假设在您的真实数据中,您并不总是对每个样本都有恰好两个观察值。

此方法使用 tidyverse 包,还有其他方法可以完成同样的事情

library(tidyverse)
df %>%   # name of your data frame
    group_by(Sample) %>%   This puts all the observations with the same value under "Sample" into groups for subsequent analysis
    summarize(Mean = mean(Phagocytic_Score), 
              SD = sd(Phagocytic_Score),
              PercentCV = SD/Mean # using the sd and mean just calculated for each group
              )