ddp与which.max函数

时间:2018-09-24 09:09:59

标签: r plyr

您也许可以为我提供帮助:对于每个ID,我希望提取具有最大“ b”值的最大“ a”值。换句话说,我希望扫描“ b”值,确定最高值(此处b = 40)。 如果几个“ a”具有相同的最高“ b”值(此处a = 20和a = 30),那么我希望选择最高的“ a”值(此处a = 30)。

这是我到目前为止所做的:

df<- data.frame(ID=c('1','1','1','1','1','1'), a=c('10','20','30','10','2','30'), b=c('10','20','30','10','40', "40"))

library(plyr)

opt <- ddply(df,.(ID),summarise,
             a=a[which.max(b)])
opt

ID a
1  2

但是,我不明白:

ID a
1  30

非常感谢您的建议。请注意,与该示例数据集相反,我处理的实际数据集非常大。非常感谢你!

1 个答案:

答案 0 :(得分:2)

我们可以按dplyr按组(arrange的结束顺序使用ba descID,然后获得第一个每组的一行。

library(dplyr)
df %>%
  group_by(ID) %>%
  arrange(desc(b), desc(a)) %>%
  slice(1)

#   ID    a     b    
#  <fct> <fct> <fct>
#1  1     30    40 

如预期输出所示,如果我们只需要IDa列,我们就可以select它们

df %>%
  group_by(ID) %>%
  arrange(desc(b), desc(a)) %>%
  slice(1) %>%
  select(ID, a)

我们也可以按升序arrange将其n()然后使用library(dplyr) df %>% group_by(ID) %>% arrange(b, a) %>% slice(n()) %>% select(ID, a)

选择最后一行
/* prototypes */
void func1 (void);
void func2 (void);
void func3 (void);
void func4 (void);
void func5 (void);
void func6 (void);
void func7 (void);
void func8 (void);

void func1(void) {
    /* do something here */
}
void func2(void) {
    /* do something here */
}
void func3(void) {
    /* do something here */
}
void func4(void) {
    /* do something here */
}
void func5(void) {
    /* do something here */
}
void func6(void) {
    /* do something here */
}
void func7(void) {
    /* do something here */
}
void func8(void) {
    /* do something here */
}

int main {
    func1();
    func2();
    func3();
    func4();
    func5();
    func6();
    func7();
    func8();
}