Как написать цикл, который ищет условие в двух столбцах, а затем добавляет значение в третий фрейм данных?

#r #genetics

#r #генетика

Вопрос:

Таблица, показывающая правильный формат данных У меня есть фрейм данных с четырьмя столбцами, и мне нужно найти способ суммировать значения в третьем столбце. Только если числа в первых двух столбцах разные. Единственный способ, который я могу придумать, это, возможно, выполнить If цикл? Это что-то можно сделать или есть лучший способ?

 Genotype summary`
   Dnov1a Dnov1b Freq rel_geno_freq
1     220    220    1   0.003367003
7     220    224    4   0.013468013
8     224    224    8   0.026936027
13    220    228   14   0.047138047
  

Это часть данных в качестве примера, мне нужно суммировать третий столбец Freq для строк 7 и 13, потому что они разные.

Комментарии:

1. Не очень понятно, какой ожидаемый результат. Можете ли вы поделиться ожидаемым результатом?

Ответ №1:

Вот tidyverse способ сделать это:

 library(tidyverse)

data <- tribble(
   ~Dnov1a, ~Dnov1b, ~Freq, ~rel_geno_freq,
     220,    220,    1,   0.003367003,
     220,    224,    4,   0.013468013,
     224,    224,    8,   0.026936027,
     220,    228,   14,   0.047138047)

data %>%
 mutate(filter_column = if_else(Dnov1a != Dnov1b, TRUE, FALSE)) %>%
 filter(filter_column == TRUE) %>%
 summarise(Total = sum(Freq))


# A tibble: 1 x 1
  Total
  <dbl>
1    18
  

Ответ №2:

 data$new = data$Dnov1a!=data$Dnov1b
data
  Dnov1a Dnov1b  Freq rel_geno_freq new  
   <int>  <int> <int>         <dbl> <lgl>
1    220    220     1       0.00337 TRUE 
2    220    224     4       0.0135  FALSE
3    224    224     8       0.0269  TRUE 
4    220    228    14       0.0471  FALSE

sum(data$Freq[data$new])

28
  

Это то, что вы ищете?

Комментарии:

1. Что-то в этом роде, да. Хотя я допустил ошибку в своем сообщении. Я имею в виду для тех, которые отличаются.

2. просто изменен == на !=