Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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_Dplyr - Fatal编程技术网

R 如何通过改变值来选择每组的行?

R 如何通过改变值来选择每组的行?,r,dplyr,R,Dplyr,我有一个数据集,看起来像: Group Gene Score direct_count secondary_count SD_per_group 1 AQP11 0.31 4 5 0.12 1 CLNS1A 0.27 0 2 0.12 1 RSF1 0.49 3

我有一个数据集,看起来像:

Group   Gene    Score   direct_count    secondary_count SD_per_group
  1    AQP11    0.31          4                5           0.12
  1    CLNS1A   0.27          0                2           0.12
  1    RSF1     0.49          3                6           0.12
  2    CFDP1    0.58          1                2           0.02
  2    CHST6    0.59          1                3           0.02
  2    UBL      0.56          1                3           0.02
  3    ACE      0.634         1                1           0.001
  3    NOS2     0.6345        1                1           0.001
  4    Gene1    0.1           10              20           0.45
  4    Gene2    0.68          3                1           0.45
  4    Gene3    0.7           0                1           0.45
  5    AGT      0.75          0                0           0.00
如果在每个过滤步骤中选择了超过1个基因,我会根据其
得分
直接计数
以及
次要计数
选择每个组中的特定基因

我试图在第一个筛选步骤中选择每个组的一个基因,如果与组中的其他基因相比,每个组的最高得分>
SD\u
得分(如果选择了多个基因,我会根据
count
列选择基因,如果它们也有匹配的直接和次要计数列,则每组只保留几个基因)

我将其编码为:

new_df <- df %>% 
  group_by(Group) %>% 
  filter((max(Score) - Score)<SD_per_group) %>% 
  slice_max(direct_count, n = 1) %>% 
  slice_max(secondary_count, n = 1) %>% 
  ungroup()
预期产出:

    
  Group Gene Score     direct_count secondary_count     SD_per_group
    1   RSF1    0.4900      3             6                0.120     #highest score >SD_per_group
    2   CHST6   0.5900      1             3                0.020     #highest secondary count
    3   ACE     0.6340      1             1                0.001     #ACE and NOS2 <SD diff and matching both counts
    3   NOS2    0.6345      1             1                0.001
    4   Gene2   0.6800      3             1                0.450    #highest direct count
    5   AGT     0.75        0             0                0.00     #only gene in the group so must be selected


组基因得分直接计数次要计数SD每组
1 RSF1 0.4900 3 6 0.120#最高得分>SD#U每组
2 CHST6 0.5900 1 3 0.020最高二次计数

3 ACE 0.6340 1 1 0.001#ACE和NOS2如果我正确理解您所需的逻辑,您想保留该组只有一行的任何行吗

如果是这样,您可以向筛选器中添加
语句,以保留每行中只有1个数量(即
n()==1
)的行:

代码

new_df <- df %>% 
  group_by(Group) %>% 
  filter((max(Score) - Score)<SD_per_group | n() == 1) %>% 
  slice_max(direct_count, n = 1) %>% 
  slice_max(secondary_count, n = 1) %>% 
  ungroup()
new_df%
分组依据(分组)%>%
过滤器(最大(分数)-分数%
切片最大值(直接计数,n=1)%>%
切片最大值(二次计数,n=1)%>%
解组()
输出

> new_df
# A tibble: 6 x 6
  Group Gene  Score direct_count secondary_count SD_per_group
  <int> <chr> <dbl>        <int>           <int>        <dbl>
1     1 RSF1  0.49             3               6        0.12 
2     2 CHST6 0.59             1               3        0.02 
3     3 ACE   0.634            1               1        0.001
4     3 NOS2  0.634            1               1        0.001
5     4 Gene2 0.68             3               1        0.45 
6     5 AGT   0.75             0               0        0
>新的
#一个tibble:6x6
组基因得分直接计数次要计数SD每组
1 RSF1 0.49 36 0.12
2 CHST6 0.59 1 3 0.02
3 ACE 0.634 1 0.001
4 3 NOS2 0.634 1 0.001
5 4 Gene2 0.68 3 1 0.45
6 5 AGT 0.75 0 0

如果我正确理解了您所需的逻辑,您想保留该组只有一行的任何行吗

如果是这样,您可以向筛选器中添加
语句,以保留每行中只有1个数量(即
n()==1
)的行:

代码

new_df <- df %>% 
  group_by(Group) %>% 
  filter((max(Score) - Score)<SD_per_group | n() == 1) %>% 
  slice_max(direct_count, n = 1) %>% 
  slice_max(secondary_count, n = 1) %>% 
  ungroup()
new_df%
分组依据(分组)%>%
过滤器(最大(分数)-分数%
切片最大值(直接计数,n=1)%>%
切片最大值(二次计数,n=1)%>%
解组()
输出

> new_df
# A tibble: 6 x 6
  Group Gene  Score direct_count secondary_count SD_per_group
  <int> <chr> <dbl>        <int>           <int>        <dbl>
1     1 RSF1  0.49             3               6        0.12 
2     2 CHST6 0.59             1               3        0.02 
3     3 ACE   0.634            1               1        0.001
4     3 NOS2  0.634            1               1        0.001
5     4 Gene2 0.68             3               1        0.45 
6     5 AGT   0.75             0               0        0
>新的
#一个tibble:6x6
组基因得分直接计数次要计数SD每组
1 RSF1 0.49 36 0.12
2 CHST6 0.59 1 3 0.02
3 ACE 0.634 1 0.001
4 3 NOS2 0.634 1 0.001
5 4 Gene2 0.68 3 1 0.45
6 5 AGT 0.75 0 0

您可以使用if-else包含这两个过滤选项

df %>% group_by(Group) %>% filter(if(n() > 1) {(max(Score) - Score) < SD_per_group} else TRUE) %>% 
   slice_max(direct_count, n = 1) %>% 
   slice_max(secondary_count, n = 1) %>% 
   ungroup()
# A tibble: 6 x 6
  Group Gene  Score direct_count secondary_count SD_per_group
  <int> <chr> <dbl>        <int>           <int>        <dbl>
1     1 RSF1  0.49             3               6        0.12 
2     2 CHST6 0.59             1               3        0.02 
3     3 ACE   0.634            1               1        0.001
4     3 NOS2  0.634            1               1        0.001
5     4 Gene2 0.68             3               1        0.45 
6     5 AGT   0.75             0               0        0    
> 
df%>%group\u by(group)%>%filter(如果(n()>1){(max(Score)-Score)%
切片最大值(直接计数,n=1)%>%
切片最大值(二次计数,n=1)%>%
解组()
#一个tibble:6x6
组基因得分直接计数次要计数SD每组
1 RSF1 0.49 36 0.12
2 CHST6 0.59 1 3 0.02
3 ACE 0.634 1 0.001
4 3 NOS2 0.634 1 0.001
5 4 Gene2 0.68 3 1 0.45
6 5 AGT 0.75 0 0
> 

您可以使用if-else包含这两个过滤选项

df %>% group_by(Group) %>% filter(if(n() > 1) {(max(Score) - Score) < SD_per_group} else TRUE) %>% 
   slice_max(direct_count, n = 1) %>% 
   slice_max(secondary_count, n = 1) %>% 
   ungroup()
# A tibble: 6 x 6
  Group Gene  Score direct_count secondary_count SD_per_group
  <int> <chr> <dbl>        <int>           <int>        <dbl>
1     1 RSF1  0.49             3               6        0.12 
2     2 CHST6 0.59             1               3        0.02 
3     3 ACE   0.634            1               1        0.001
4     3 NOS2  0.634            1               1        0.001
5     4 Gene2 0.68             3               1        0.45 
6     5 AGT   0.75             0               0        0    
> 
df%>%group\u by(group)%>%filter(如果(n()>1){(max(Score)-Score)%
切片最大值(直接计数,n=1)%>%
切片最大值(二次计数,n=1)%>%
解组()
#一个tibble:6x6
组基因得分直接计数次要计数SD每组
1 RSF1 0.49 36 0.12
2 CHST6 0.59 1 3 0.02
3 ACE 0.634 1 0.001
4 3 NOS2 0.634 1 0.001
5 4 Gene2 0.68 3 1 0.45
6 5 AGT 0.75 0 0
>