在R中为DataFrame按日期分组添加occurrence序列列的实现方法
解决方案
你可以通过分组生成序号再映射为字母的方式实现需求,以下提供两种常用方法:
方法一:使用dplyr包(tidyverse生态)
先按day分组,再用row_number()生成组内递增序号,最后通过内置的letters向量将序号转为对应的字母:
library(dplyr) day <- c(1, 1, 2, 3, 3, 3, 4, 4) value <- c(32, 43, 54, 23, 76, 88, 11, 23) df <- data.frame(day, value) df <- df %>% group_by(day) %>% mutate(occurrence = letters[row_number()]) %>% ungroup() # 查看结果 df
方法二:使用Base R(无需额外包)
用ave()函数对每个day组生成连续序列,再映射为字母:
day <- c(1, 1, 2, 3, 3, 3, 4, 4) value <- c(32, 43, 54, 23, 76, 88, 11, 23) df <- data.frame(day, value) df$occurrence <- letters[ave(rep(1, nrow(df)), df$day, FUN = seq_along)] # 查看结果 df
两种方法最终都会得到你期望的结果:
day value occurrence 1 1 32 a 2 1 43 b 3 2 54 a 4 3 23 a 5 3 76 b 6 3 88 c 7 4 11 a 8 4 23 b
注意:如果你的分组内行数超过26行(即需要用到"aa"这类标识),可以自定义字母生成逻辑,比如结合进制转换实现,但从你的示例看,当前方案足够覆盖需求。
内容的提问来源于stack exchange,提问作者fffionaaa
相关产品推荐
相关产品推荐

