R 如何提取相同且最高的值?

R 如何提取相同且最高的值?,r,dataframe,if-statement,R,Dataframe,If Statement,我有一个如下所示的表,如果第4行和第8行中的行具有相同的值,我喜欢提取行,否则为最大值 Input: data 1 9708 10948 1 1 9708 10948 1 1 11590 18647 4 1 12897 15040 2 1 11590 18647 4 1 15040 15500 3 1 11590 18647 4 1 15950 16580 2 1 108570 109500 1 1 108570 109500

我有一个如下所示的表,如果第4行和第8行中的行具有相同的值,我喜欢提取行,否则为最大值

Input: data

1   9708  10948  1  1   9708  10948  1
1  11590  18647  4  1  12897  15040  2
1  11590  18647  4  1  15040  15500  3
1  11590  18647  4  1  15950  16580  2
1 108570 109500  1  1 108570 109500  1
1 440900 443400  2  1 440900 441080  1
1 440900 443400  2  1 443140 443400  1
1 539670 542200  3  1 539700 540450  2
1 539670 542200  3  1 541070 541770  2
1 539670 542200  3  1 540450 541070  3
1 712695 715758 14  1 712799 712900  5
1 712695 715758 14  1 713010 713230  8
1 751500 759199  8  1 752555 752773  5
1 761083 764000  9  1 761083 761198  1
1 761083 764000  9  1 762200 762300  8
1 761083 764000  9  1 762300 762800  9



ideal Output:

1   9708  10948  1  1   9708  10948  1
1  11590  18647  4  1  15040  15500  3
1 108570 109500  1  1 108570 109500  1
1 440900 443400  2  1 440900 441080  1
1 440900 443400  2  1 443140 443400  1
1 539670 542200  3  1 540450 541070  3
1 712695 715758 14  1 713010 713230  8
1 751500 759199  8  1 752555 752773  5
1 761083 764000  9  1 762300 762800  9
我尝试了两个命令,第一个命令在第4列和第8列之间给我相同的值,但是我想要第二个命令和理想的输出

data<-data[which(data$V4 == data$V8),]

data<- data[ifelse(data$V4 == data$V8,data$V4,max(data$V8)),]
使用dplyr:

结果:

# A tibble: 9 x 8
# Groups:   V4 [7]
     V1     V2     V3    V4    V5     V6     V7    V8
  <int>  <int>  <int> <int> <int>  <int>  <int> <int>
1     1  11590  18647     4     1  15040  15500     3
2     1 440900 443400     2     1 440900 441080     1
3     1 440900 443400     2     1 443140 443400     1
4     1 712695 715758    14     1 713010 713230     8
5     1 751500 759199     8     1 752555 752773     5
6     1   9708  10948     1     1   9708  10948     1
7     1 108570 109500     1     1 108570 109500     1
8     1 539670 542200     3     1 540450 541070     3
9     1 761083 764000     9     1 762300 762800     9

您可能也可以使用split在base R中执行相同的操作。其思想是根据V4的值将数据分成若干组,然后选择V4==V8的任意情况下的组并从中提取该行,以及不存在该情况下的组,然后从中提取V8为最大值的行。

我猜op希望按V3进行分组,因此,该方法应先按V3分组,然后根据您的情况进行筛选

library(tidyverse)

df %>% 
  group_by(V3) %>% 
  filter(V4 == V8 | (V4 == max(V4) & V8 == max(V8)))


# A tibble: 9 x 8
# Groups:   V3 [8]
     V1     V2     V3    V4    V5     V6     V7    V8
  <int>  <int>  <int> <int> <int>  <int>  <int> <int>
1     1   9708  10948     1     1   9708  10948     1
2     1  11590  18647     4     1  15040  15500     3
3     1 108570 109500     1     1 108570 109500     1
4     1 440900 443400     2     1 440900 441080     1
5     1 440900 443400     2     1 443140 443400     1
6     1 539670 542200     3     1 540450 541070     3
7     1 712695 715758    14     1 713010 713230     8
8     1 751500 759199     8     1 752555 752773     5
9     1 761083 764000     9     1 762300 762800     9

我不明白你的问题?为什么第二行是您想要的输出?第四列和第八列不相等,它们也不是最大值。为什么结果只是原始data.frame的子集?我也不完全理解输出背后的逻辑,正如cettt已经说明的那样。@Cett,第二行,由于第4列和第8列中的值不相同,我希望第5列到第7列的最大值与第1列到第8列重叠3@DSGym,我的原始文件真的很大,所以我选择了其中的一个子集。最大值是什么意思?在哪一列?因此,对于第4列中的每个数字,您希望保留第8列与之相等的行,或者,如果第8行中的数字不相等,则保留第8列值最高的行?您认为V3是如何工作的?我的意思是,你的结果似乎是准确的,但我不确定为什么…@iod,我比较了数据输入和期望的输出,猜测这就是op想要的。或者可能是group_byV2、V3或group_byV2,因为V2和V3似乎都是标识符或1对1。我不得不猜测,因为op没有提供变量的含义。在我看来,有很多ID,但为什么不按V4分组呢?另外,如果maxV8大于V4,会发生什么情况?然后您将得到V4==V8和maxV8行。
library(tidyverse)

df %>% 
  group_by(V3) %>% 
  filter(V4 == V8 | (V4 == max(V4) & V8 == max(V8)))


# A tibble: 9 x 8
# Groups:   V3 [8]
     V1     V2     V3    V4    V5     V6     V7    V8
  <int>  <int>  <int> <int> <int>  <int>  <int> <int>
1     1   9708  10948     1     1   9708  10948     1
2     1  11590  18647     4     1  15040  15500     3
3     1 108570 109500     1     1 108570 109500     1
4     1 440900 443400     2     1 440900 441080     1
5     1 440900 443400     2     1 443140 443400     1
6     1 539670 542200     3     1 540450 541070     3
7     1 712695 715758    14     1 713010 713230     8
8     1 751500 759199     8     1 752555 752773     5
9     1 761083 764000     9     1 762300 762800     9