使用R

时间:2018-08-06 22:16:20

标签: r dplyr tidyverse tidyr

我们提供了一些整齐的数据,包括处理(多个样本和对照),时间点和测量值。我想通过除以控制变量中的相应时间点来归一化所有样本。

我知道如何使用其自己的列中的每个值来执行此操作,但是无法弄清楚如何将gather mutatesumamrise等{ 1}}或tidyr可以很简单地做到这一点。

这是示例数据帧定义:

dplyr

数据框如下:

structure(list(time = c(1, 2, 3, 1, 2, 3, 1, 2, 3), 
value = c(10, 20, 15, 100, 210, 180, 110, 180, 140), 
as.factor.treat. = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), 
.Label = c("c", "t1", "t2"), class = "factor")), 
.Names = c("time", "value", "treat"), 
row.names = c(NA, -9L), class = "data.frame")

预期输出。相同,但是time value treat 1 10 c 2 20 c 3 15 c 1 100 t1 2 210 t1 3 180 t1 1 110 t2 2 180 t2 3 140 t2 列包含normvalue

我想使用tidyverse程序获取每个治疗和时间点的归一化c(1,1,1,10,10.5,12,11,9,9.333333)列...

1 个答案:

答案 0 :(得分:1)

如果您按time分组(假设在示例中,它是时间点的分组变量),那么我们可以在mutate语句中使用方括号表示法来仅在组。我们可以使用它来访问每个组的控制值,然后将未归一化的值除以该值:

df %>%
    group_by(time) %>%
    mutate(value.norm = value / value[treat == 'c'])

# A tibble: 9 x 4
# Groups:   time [3]
   time value treat value.norm
  <dbl> <dbl> <fct>      <dbl>
1     1    10 c           1   
2     2    20 c           1   
3     3    15 c           1   
4     1   100 t1         10   
5     2   210 t1         10.5 
6     3   180 t1         12   
7     1   110 t2         11   
8     2   180 t2          9   
9     3   140 t2          9.33

所有这些操作是将每一行的value列除以具有相同时间值的对照样本的值。如您所见,这并不关心样本t1是否缺少对time == 1的观察:

df <- structure(list(time = c(1, 2, 3, 2, 3, 1, 2, 3), 
                     value = c(10, 20, 15, 210, 180, 110, 180, 140), 
                     as.factor.treat. = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L), 
                                                  .Label = c("c", "t1", "t2"), class = "factor")), 
                .Names = c("time", "value", "treat"), 
                row.names = c(NA, -8L), class = "data.frame")

df %>%
    group_by(time) %>%
    mutate(value.norm = value / value[treat == 'c'])

# A tibble: 8 x 4
# Groups:   time [3]
   time value treat value.norm
  <dbl> <dbl> <fct>      <dbl>
1     1    10 c           1   
2     2    20 c           1   
3     3    15 c           1   
4     2   210 t1         10.5 
5     3   180 t1         12   
6     1   110 t2         11   
7     2   180 t2          9   
8     3   140 t2          9.33