Возьмите разницу между двумя уровнями факторной переменной, сохранив другие факторные переменные в R - PullRequest
0 голосов
/ 10 марта 2019

У меня есть таблица данных в R, которая выглядит следующим образом:

Gene Population Color Coverage
A_1 PopA Blue 0.016
A_1 PopA Green 0.022
A_1 PopB Blue 0.1322
A_1 PopB Green 0.552
A_2 PopA Blue 0.13
A_2 PopA Green 0.14
A_2 PopB Blue 1
A_2 PopB Green 0.9

Я бы хотел взять разницу между разными цветами (синим и зеленым), но только в пределах одного гена и популяции.В конечном итоге я хотел бы вывести таблицу, которая выглядит следующим образом:

Gene Population Coverage
A_1 PopA -0.006
A_1 PopB -0.4198
A_2 PopA -0.01
A_2 PopB 0.1

Я использую функцию summarySE () из Rmisc, чтобы получить средние значения, которые я указал выше, но неясно, как я буду вычислятьчто-то вроде разницы между значениями.

Спасибо!

1 Ответ

1 голос
/ 10 марта 2019

Один вариант с dplyr будет

library(dplyr)

my.df %>% 
  group_by(Gene, Population) %>% 
  summarize(Coverage = Coverage[Color == "Blue"] - Coverage[Color == "Green"])

# A tibble: 4 x 3
# Groups:   Gene [?]
#   Gene  Population Coverage
#   <fct> <fct>         <dbl>
# 1 A_1   PopA       -0.00600
# 2 A_1   PopB       -0.420  
# 3 A_2   PopA       -0.01   
# 4 A_2   PopB        0.100 

Данные

my.df <- 
  structure(list(Gene = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("A_1", "A_2"), class = "factor"), 
                 Population = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("PopA", "PopB"), class = "factor"), 
                 Color = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Blue", "Green"), class = "factor"), 
                 Coverage = c(0.016, 0.022, 0.1322, 0.552, 0.13, 0.14, 1, 0.9)), class = "data.frame", row.names = c(NA, -8L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...