Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何编写一个循环,在两列中查找条件,然后在数据帧的第三列中添加值?_R_Genetics - Fatal编程技术网

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

R 如何编写一个循环,在两列中查找条件,然后在数据帧的第三列中添加值?,r,genetics,R,Genetics,我有一个有四列的数据框,我需要找到一种方法来对第三列中的值求和。仅当前两列中的数字不同时。我能想到的唯一方法就是做一个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 22

我有一个有四列的数据框,我需要找到一种方法来对第三列中的值求和。仅当前两列中的数字不同时。我能想到的唯一方法就是做一个
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
求和,因为它们不同。

data$new=data$Dnov1a=数据$Dnov1b
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
数据 Dnov1a Dnov1b频率相关基因频率新 1 220 1 0.00337正确 222022440.0135假 3224224 8 0.0269正确 4 220 228 14 0.0471错误 总和(数据$Freq[数据$new]) 28
这就是您要找的吗?

data$new=data$Dnov1a=数据$Dnov1b
数据
Dnov1a Dnov1b频率相关基因频率新
1 220 1 0.00337正确
222022440.0135假
3224224 8 0.0269正确
4 220 228 14 0.0471错误
总和(数据$Freq[数据$new])
28

这就是你要找的吗?

这里有一个
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
库(tidyverse)
数据%
变异(筛选列=if_-else(Dnov1a!=Dnov1b,真,假))%>%
筛选器(筛选器_列==TRUE)%>%
总结(总计=总和(频率))
#一个tibble:1x1
全部的
1    18

这里有一个
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
库(tidyverse)
数据%
变异(筛选列=if_-else(Dnov1a!=Dnov1b,真,假))%>%
筛选器(筛选器_列==TRUE)%>%
总结(总计=总和(频率))
#一个tibble:1x1
全部的
1    18

对预期输出不是很清楚。你能分享一下预期的产出吗?对预期产出不是很清楚。你能分享一下预期的产出吗?是的,大致是这样的。虽然,我在我的帖子里犯了一个错误。我指的是那些不同的。只是为
更改了
=
=沿着这条线的东西,是的。虽然,我在我的帖子里犯了一个错误。我指的是那些不同的。只是为
更改了
=
=