如何在R语言数据框中生成表示动物出现实例序号的Instance列(而非总计数)
如何在R语言数据框中生成表示动物出现实例序号的Instance列(而非总计数)
嗨,这个需求我经常碰到,你要的是每组内逐行递增的出现序号,而不是每组的总数量对吧?给你两个实用的实现方法:
方法一:使用dplyr包(tidyverse生态)
既然你提到了group_by,那用dplyr来实现最直观:
# 先还原你的原始数据 ID <- c(15, 25, 90, 1, 23, 543) animal <- c("fish", "dog", "fish", "cat", "dog", "fish") df <- data.frame(ID, animal) # 加载dplyr包(如果没安装先运行 install.packages("dplyr")) library(dplyr) # 生成Instance列 df <- df %>% group_by(animal) %>% # 按animal分组 mutate(Instance = row_number()) %>% # 每组内从1开始生成序号 ungroup() # 取消分组状态(可选,但推荐保持数据框的常规状态)
运行后你的df就会得到想要的Instance列:1, 1, 2, 1, 2, 3。row_number()会严格按照数据的原有顺序,给每个动物组内的行分配递增序号。
方法二:基础R实现(无需额外包)
如果不想加载第三方包,用基础R的ave()函数也能搞定:
# 直接在原始df上添加Instance列 df$Instance <- ave(df$ID, df$animal, FUN = seq_along)
这里ave()会按animal分组,对每组应用seq_along函数——这个函数会生成从1到组内行数的序列,完美匹配你要的实例序号。
两种方法最终得到的结果完全一致,你可以根据自己的习惯选择~
备注:内容来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

