使用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)
如果你真的需要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
您可以不使用管道来完成相同的操作:
ungroup(
select(
mutate(
filter(row_number() == which.max(set)),
greater=ifelse(a>b, 1, 0)), gid, set, greater))
但是……但是……为什么呢?! :-)
magrittr
包开始使用,但在“Hadleyverse”(即dplyr
,ggvis
,tidyr
等)中广泛使用。与复杂的嵌套括号不同,这个习语将数据“管道”到函数进行处理,类似于D3 JavaScript函数链的工作方式。 - hrbrmstrfilter(row_number() == which.max(set))
可能更安全。 - Rich Scriven%>%
似乎最多只能显示十个项目,然后我会得到一行.. ... ...
,看起来表示还有更多?为什么会有这种限制,我该如何避免它? - Wells