R:具有最大值的子集/组数据帧?

Wel*_*lls 3 r greatest-n-per-group dataframe rdata

给定这样的数据框:

  gid set  a  b
1   1   1  1  9
2   1   2 -2 -3
3   1   3  5  6
4   2   2 -4 -7
5   2   6  5 10
6   2   9  2  0
Run Code Online (Sandbox Code Playgroud)

如何对gid具有最大值set且1/0 的唯一数据帧进行子集/分组,其a值是否大于其b值?

所以在这里,它是,呃......

1,3,0
2,9,1
Run Code Online (Sandbox Code Playgroud)

在SQL中有点愚蠢的简单但我希望能更好地控制我的R,所以......

hrb*_*str 6

一块蛋糕dplyr:

dat <- read.table(text="gid set  a  b
1   1  1  9
1   2 -2 -3
1   3  5  6
2   2 -4 -7
2   6  5 10
2   9  2  0", header=TRUE)

library(dplyr)

dat %>%
  group_by(gid) %>%
  filter(row_number() == which.max(set)) %>%
  mutate(greater=a>b) %>%
  select(gid, set, greater)

## Source: local data frame [2 x 3]
## Groups: gid
## 
##   gid set greater
## 1   1   3   FALSE
## 2   2   9    TRUE
Run Code Online (Sandbox Code Playgroud)

如果你确实需要1的和0的和dplyr 群体造成任何焦虑:

dat %>%
  group_by(gid) %>%
  filter(row_number() == which.max(set)) %>%
  mutate(greater=ifelse(a>b, 1, 0)) %>%
  select(gid, set, greater) %>%
  ungroup

## Source: local data frame [2 x 3]
## 
##   gid set greater
## 1   1   3       0
## 2   2   9       1
Run Code Online (Sandbox Code Playgroud)

没有管道你可以做同样的事情:

ungroup(
  select(
    mutate(
      filter(row_number() == which.max(set)), 
      greater=ifelse(a>b, 1, 0)), gid, set, greater))
Run Code Online (Sandbox Code Playgroud)

但是......但是...... 为什么?!:-)