从R中的值开始编号

  • 本文关键字:开始 编号 r
  • 更新时间 :
  • 英文 :


我有一个非常简单的数据集,例如:

datfra <- data.frame(ID = c(2, 3, 5, 4, 1),
Species = c("bluewhale", "bluewhale","bndolphin","bluewhale","whalesp"))

外观:

> datfra
ID   Species
1  2 bluewhale
2  3 bluewhale
3  5 bndolphin
4  4 bluewhale
5  1   whalesp

我想添加第三列,对行进行编号,但从某个特定的数字开始,类似于:

strartingfrom <- 15
datfra <- datfra %>% arrange(ID) %>% mutate(newID = row_number(from=strartingfrom))

显然,row_number内部的from不起作用。有人有一种优雅的方法来给从不同数字开始的行编号为1吗?

应该看起来像:

newID ID   Species
1    16  1   whalesp
2    17  2 bluewhale
3    18  3 bluewhale
4    19  4 bluewhale
5    20  5 bndolphin

[编辑]

我只是尝试了一种简单的方法就解决了这个问题:

datfra <- datfra %>% arrange(ID) %>% mutate(newID = strartingfrom + row_number())

您可以直接尝试以下操作:

datfra <- datfra %>% 
arrange(ID) %>% 
mutate(newID = strartingfrom:(strartingfrom + nrow(datfra) - 1))

或者制作一个函数:

newID_row_number <- function(dt, start_from, by_id="ID") {
dt <- dt %>% 
arrange(!!as.name(by_id)) %>% 
mutate(newID = start_from:(start_from+nrow(dt)-1))
return(dt)
}
strartingfrom <- 15
datfra <- newID_row_number(datfra, strartingfrom)

也许你可以使用这个:

start = 10
datfra$newID = seq(start, nrow(datfra)+start-1)

使用`:`()order()

i <- 15  ## define start
transform(datfra[order(datfra$ID), ], new=15:(15 + nrow(datfra) - 1))
#   ID   Species new
# 5  1   whalesp  15
# 1  2 bluewhale  16
# 2  3 bluewhale  17
# 4  4 bluewhale  18
# 3  5 bndolphin  19

最新更新