如何编写一个循环,在两列中查找条件,然后将该值添加到数据帧的第三部分中?

时间:2019-04-12 10:52:21

标签: r genetics

Table showing correct format of data我有一个包含四列的数据框,我需要找到一种将第三列中的值求和的方法。仅当前两列中的数字不同时。我能想到的唯一方法是做一个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

作为示例,这是数据的一部分,我需要对第7行和第13行的第三列Freq求和,因为它们是不同的。

2 个答案:

答案 0 :(得分:0)

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 :(得分:0)

这是一种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