我有一个如下表,如果行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列之间给了我相同的值,但是我想要类似的第二个命令和理想的Output。
data<-data[which(data$V4 == data$V8),]
data<- data[ifelse(data$V4 == data$V8,data$V4,max(data$V8)),]
答案 0 :(得分:1)
使用dplyr
:
bind_rows(
filter(group_by(data,V4), !any(V4==V8),V8==max(V8)),
filter(group_by(data,V4), any(V4==V8),V4==V8)
)
结果:
# 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
您可能可以在带有拆分的R基座中执行相同的操作。想法是根据V4的值将数据分成几组,然后选择存在V4 == V8的任何情况的组,并从中拉出那一行,然后选择没有这种情况的组,然后您从此处拉出其中V8为最大值的行。
答案 1 :(得分:1)
我猜操作者想按V3
分组,因此方法应首先为group_by
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