我有一个非常简单的数据集,例如:
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