在同一数据框中对具有不同条件的时段进行排名

鲁本

我想根据某些条件使用不同的条件对数据框的行进行排名。

我有一个包含以下数据的数据框:采样日期,采样日期的月份,种群中育种个体的百分比和格里历。

如果要在超过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")

我所能做的就是每个月进行一次循环,以使用该函数将值更改为较高和较低的20,if但是我不知道如何在繁殖期内进行排名。

你可以帮帮我吗?

提前致谢

bgoldst
df <- data.frame(sampling_date=c('1/1/00','5/1/00','9/1/00','13/1/00','17/1/00',
                                 '21/1/00','25/1/00','29/1/00','1/2/00','5/2/00',
                                 '9/2/00','13/2/00','17/2/00','21/2/00','25/2/00','28/2/00'), 
                                  month=c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2),
                                  breeder=c(0,10,50,100,30,20,12,3,10,20,50,80,50,51,30,10), 
                                  gregorian_days=c(1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61))

df$sampling_date <- as.Date(df$sampling_date,'%d/%m/%y')

df$rank <- do.call(c, by(df, df$month, function(x) { 
                      breeding <- x$breeder>=20 
                      first <- which(breeding)[1] 
                      start <- x$sampling_date[first]
                      ifelse(breeding,
                             as.integer(x$sampling_date-start)%/%3+1,
                             c('A','B')[(1:nrow(x)>=first)+1])
                      }))
df
##    sampling_date month breeder gregorian_days rank
## 1     2000-01-01     1       0              1    A
## 2     2000-01-05     1      10              5    A
## 3     2000-01-09     1      50              9    1
## 4     2000-01-13     1     100             13    2
## 5     2000-01-17     1      30             17    3
## 6     2000-01-21     1      20             21    5
## 7     2000-01-25     1      12             25    B
## 8     2000-01-29     1       3             29    B
## 9     2000-02-01     2      10             33    A
## 10    2000-02-05     2      20             37    1
## 11    2000-02-09     2      50             41    2
## 12    2000-02-13     2      80             45    3
## 13    2000-02-17     2      50             49    5
## 14    2000-02-21     2      51             53    6
## 15    2000-02-25     2      30             57    7
## 16    2000-02-28     2      10             61    B

笔记:

  • 我已将您的日期强迫Date上课,as.Date(...,'%d/%m/%y');以准备按日期进行算术运算。
  • 我已经将该by()功能用于分组逻辑。我选择by()aggregate()ave()因为后两者一次只能在一个列上工作,但是逻辑需要多个列(特别是sampling_datebreeder)来by()支持。同样,aggregate()始终将汇总的数据与输入的data.frame按列组合,将每个组强制为单行,因此通常不适用于多元素返回值;ave()并且by()是必需的。
  • 在我的解决方案中,我预先计算(1)一个逻辑向量,该逻辑向量表示哪些行是“育种日”,哪些不是(breeding),(2)第一个育种日行索引(first),以及(3)第一个育种日Date值(start) 。然后我进入了繁殖期ifelse(breeding,...)
  • 对于繁殖日,我将每天按日期进行减法减去开始日,然后使用整数除以3(加1)来获得等级值。
  • 对于非繁殖日,我c('A','B')基于非繁殖日是在之前还是之后进行索引start

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同一数据框中具有相同日期但不同小时的多个文件

来自分类Dev

在R中同一数据框中具有部分匹配名称的列之间进行简单算术

来自分类Dev

根据条件从同一数据框中查找行

来自分类Dev

在同一数据框中具有父ID的熊猫联合

来自分类Dev

在同一数据框中具有父ID的熊猫联合

来自分类Dev

Pandas:来自同一数据框的列的条件连接

来自分类Dev

如何创建到同一数据库但具有不同凭据的多个sqlalchemy连接?

来自分类Dev

访问:同一数据库上的 2 个角色具有不同的角色

来自分类Dev

有效/简单地对同一数据集的不同范围进行计数

来自分类Dev

使用别名Spark Scala在同一数据框中的不同列上执行多个聚合

来自分类Dev

根据同一数据框中另一列内容的条件,在数据框中添加新列

来自分类Dev

基于同一数据框中的多个条件创建新列

来自分类Dev

从具有不同条件的同一张表中获取数据

来自分类Dev

熊猫从同一数据框中减去2行

来自分类Dev

从同一数据框中添加行

来自分类Dev

匹配同一数据框中的最近日期

来自分类Dev

在Python中连接同一数据框的多个列

来自分类Dev

迭代比较同一数据框中的列值

来自分类Dev

比较同一数据框列中的值

来自分类Dev

同一数据框中的多个线性模型

来自分类Dev

如何对同一字段进行两次求和,但在数据透视表中具有不同的求和条件?

来自分类Dev

在同一数据框中的两个字符串列之间创建具有模糊分数的新列

来自分类Dev

如何在apache spark中将一列与同一数据框中的列进行比较

来自分类Dev

如何根据条件用同一数据框中的另一个值替换熊猫数据框中的范围内的值

来自分类Dev

如何对 R 数据框中的唯一值进行排名

来自分类Dev

通过两个具有不同键的键合并同一数组中的对象

来自分类Dev

根据同一数据框中的其他行从数据框中删除行

来自分类Dev

R-使用reshape2或dplyr对同一单元中具有多个元素的数据框进行整形

来自分类Dev

将数据框中的所有数字除以同一数据框中的选定行以及R中的相应列位置

Related 相关文章

  1. 1

    同一数据框中具有相同日期但不同小时的多个文件

  2. 2

    在R中同一数据框中具有部分匹配名称的列之间进行简单算术

  3. 3

    根据条件从同一数据框中查找行

  4. 4

    在同一数据框中具有父ID的熊猫联合

  5. 5

    在同一数据框中具有父ID的熊猫联合

  6. 6

    Pandas:来自同一数据框的列的条件连接

  7. 7

    如何创建到同一数据库但具有不同凭据的多个sqlalchemy连接?

  8. 8

    访问:同一数据库上的 2 个角色具有不同的角色

  9. 9

    有效/简单地对同一数据集的不同范围进行计数

  10. 10

    使用别名Spark Scala在同一数据框中的不同列上执行多个聚合

  11. 11

    根据同一数据框中另一列内容的条件,在数据框中添加新列

  12. 12

    基于同一数据框中的多个条件创建新列

  13. 13

    从具有不同条件的同一张表中获取数据

  14. 14

    熊猫从同一数据框中减去2行

  15. 15

    从同一数据框中添加行

  16. 16

    匹配同一数据框中的最近日期

  17. 17

    在Python中连接同一数据框的多个列

  18. 18

    迭代比较同一数据框中的列值

  19. 19

    比较同一数据框列中的值

  20. 20

    同一数据框中的多个线性模型

  21. 21

    如何对同一字段进行两次求和,但在数据透视表中具有不同的求和条件?

  22. 22

    在同一数据框中的两个字符串列之间创建具有模糊分数的新列

  23. 23

    如何在apache spark中将一列与同一数据框中的列进行比较

  24. 24

    如何根据条件用同一数据框中的另一个值替换熊猫数据框中的范围内的值

  25. 25

    如何对 R 数据框中的唯一值进行排名

  26. 26

    通过两个具有不同键的键合并同一数组中的对象

  27. 27

    根据同一数据框中的其他行从数据框中删除行

  28. 28

    R-使用reshape2或dplyr对同一单元中具有多个元素的数据框进行整形

  29. 29

    将数据框中的所有数字除以同一数据框中的选定行以及R中的相应列位置

热门标签

归档