gpt4 book ai didi

r - 选择包含 R 中每日最大值的行

转载 作者:行者123 更新时间:2023-12-02 03:08:01 25 4
gpt4 key购买 nike

所以我想对数据框进行子集化以选择具有每日最大值的行。

Site    Year   Day     Time      Cover       Size TempChange
ST1 2011 97 0.0 Closed small 0.97
ST1 2011 97 0.5 Closed small 1.02
ST1 2011 97 1.0 Closed small 1.10

数据框部分如上。我想仅选择每个变量 Day 具有变量 TempChange 最大值的行。我想这样做是因为我对这些特定时间的特定变量(未显示)感兴趣。

修改后的示例和所需的输出

Site  Day   Temp     Row
a 10 0.2 1
a 10 0.3 2
a 11 0.5 3
a 11 0.4 4
b 10 0.1 5
b 10 0.8 6
b 11 0.7 7
b 11 0.6 8
c 10 0.2 9
c 10 0.3 10
c 11 0.5 11
c 11 0.8 12

所需输出

Site  Day   Temp     Row
a 10 0.3 2
a 11 0.5 3
b 10 0.8 6
b 11 0.7 7
c 10 0.3 10
c 11 0.8 12

希望这能让它更清楚。

最佳答案

在研究了原始数据帧代码之后,我意识到 plyr 可以一次性完成此操作:

> df
Day V Z
1 97 0.26575207 1
2 97 0.09443351 2
3 97 0.88097858 3
4 98 0.62241515 4
5 98 0.61985937 5
6 99 0.06956219 6
7 100 0.86638108 7
8 100 0.08382254 8

> ddply(df,~Day,function(x){x[which.max(x$V),]})
Day V Z
1 97 0.88097858 3
2 98 0.62241515 4
3 99 0.06956219 6
4 100 0.86638108 7

要获取多列的唯一组合的最大值行,只需将变量添加到公式中即可。对于您修改后的示例,则:

> df
Site Day Temp Row
1 a 10 0.2 1
2 a 10 0.3 2
3 a 11 0.5 3
4 a 11 0.4 4
5 b 10 0.1 5
6 b 10 0.8 6
7 b 11 0.7 7
8 b 11 0.6 8
9 c 10 0.2 9
10 c 10 0.3 10
11 c 11 0.5 11
12 c 11 0.8 12
> ddply(df,~Day+Site,function(x){x[which.max(x$Temp),]})
Site Day Temp Row
1 a 10 0.3 2
2 b 10 0.8 6
3 c 10 0.3 10
4 a 11 0.5 3
5 b 11 0.7 7
6 c 11 0.8 12

请注意,这与原始数据帧的顺序不同,但您可以修复该问题。

> dmax = ddply(df,~Day+Site,function(x){x[which.max(x$Temp),]})
> dmax[order(dmax$Row),]
Site Day Temp Row
1 a 10 0.3 2
4 a 11 0.5 3
2 b 10 0.8 6
5 b 11 0.7 7
3 c 10 0.3 10
6 c 11 0.8 12

关于r - 选择包含 R 中每日最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9718711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com