【发布时间】:2015-05-26 15:22:54
【问题描述】:
我想根据某些条件对具有不同标准的数据框的行进行排名。
我有一个包含以下数据的数据框:采样日期、采样日期的月份、种群中繁殖个体的百分比和公历天数。
如果行在超过 20% 的人口正在繁殖的时期(繁殖期)之内或之外,我想以不同的方式对这些行进行排名。 我有这个信息好几个月了,但在这里我只写了两个:
mydf <- read.table(text="sampling_date - month - breeder - gregorian_days
1/1/00-1-0-1
5/1/00-1-10-5
9/1/00-1-50-9
13/1/00-1-100-13
17/1/00-1-30-17
21/1/00-1-20-21
25/1/00-1-12-25
29/1/00-1-3-29
1/2/00-2-10-33
5/2/00-2-20-37
9/2/00-2-50-41
13/2/00-2-80-45
17/2/00-2-50-49
21/2/00-2-51-53
25/2/00-2-30-57
28/2/00-2-10-61"
, sep="-", header=TRUE)
mydf
我想对每个月的行进行排名:
(1)在值小于20的第一行之前写A
(2) 从第一个大于 20 的值开始,开始排名,但每 3 个真实天对行进行排名(例如,排名 1 = 第 5、6、7 天;排名 2 = 第 8、9、10 天...) .因此,繁殖期内的所有行不必是连续的。有可能第一个月的某些等级不会被添加为 4。
这样做直到最后一行的值大于 20
(3) 在最后一行后面的值大于 20 放 B
下面我添加了我想要得到的结果
sampling_date month breeder gregorian_days rank
1 1/1/00 1 0 1 A
2 5/1/00 1 10 5 A
3 9/1/00 1 50 9 1
4 13/1/00 1 100 13 2
5 17/1/00 1 30 17 3
6 21/1/00 1 20 21 5
7 25/1/00 1 12 25 B
8 29/1/00 1 3 29 B
9 1/2/00 2 10 33 A
10 5/2/00 2 20 37 1
11 9/2/00 2 50 41 2
12 13/2/00 2 80 45 3
13 17/2/00 2 50 49 5
14 21/2/00 2 51 53 6
15 25/2/00 2 30 57 7
16 28/2/00 2 10 61 B
开始排名的阈值可以是基于数据框一列的值的标准,或者我可以得到确切的日期来定义周期繁殖期内外的不同行为。
例如阈值
Start<- c("9/1/00", "5/2/00")
End <- c("21/1/00", "25/2/00")
我所要做的就是使用函数if 为每个月创建一个循环以将值更改为更高和更低的 20,但我不知道如何在繁殖期内进行排名。
你能帮帮我吗?
提前致谢
【问题讨论】:
-
我刚刚更正了对象
mydf。现在它应该可以完美运行了。非常感谢