您也许可以为我提供帮助:对于每个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
非常感谢您的建议。请注意,与该示例数据集相反,我处理的实际数据集非常大。非常感谢你!
答案 0 :(得分:2)
我们可以按dplyr
按组(arrange
的结束顺序使用b
,a
desc
和ID
,然后获得第一个每组的一行。
library(dplyr)
df %>%
group_by(ID) %>%
arrange(desc(b), desc(a)) %>%
slice(1)
# ID a b
# <fct> <fct> <fct>
#1 1 30 40
如预期输出所示,如果我们只需要ID
和a
列,我们就可以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();
}