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,所以......
一块蛋糕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)
但是......但是...... 为什么?!:-)