Как написать цикл, который ищет условие в двух столбцах, а затем добавляет значение в третий кадр данных? - PullRequest
1 голос
/ 12 апреля 2019

Таблица, показывающая правильный формат данных У меня есть фрейм данных с четырьмя столбцами, и мне нужно найти способ суммирования значений в третьем столбце. Только если цифры в первых двух столбцах разные. Единственный способ, которым я могу придумать, это сделать цикл 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, потому что они разные.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Вот способ 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
0 голосов
/ 12 апреля 2019
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

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

...