You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言DataFrame中标记新序列开始的首行

解决方案

基础R实现

直接利用duplicated()函数判断Number列是否为首次出现,结合ifelse()生成标记列:

# 新增标记列
df$first <- ifelse(!duplicated(df$Number), "yes", "no")

# 查看结果
df
#>   Number Day Letter first
#> 1      1   1      a   yes
#> 2      1   2      a    no
#> 3      1   3      a    no
#> 4      1   4      a    no
#> 5      2   1      b   yes
#> 6      2   2      b    no
#> 7      2   3      b    no
#> 8      2   4      b    no

tidyverse(dplyr)实现

如果习惯使用tidyverse生态,用dplyr::mutate()结合duplicated()或行号对比都可以实现:

library(dplyr)

# 方法1:利用duplicated快速判断
df_des <- df %>%
  mutate(first = if_else(!duplicated(Number), "yes", "no"))

# 方法2:通过行号与前一行对比(适用于更复杂的序列场景)
df_des <- df %>%
  mutate(first = if_else(row_number() == 1 | Number != lag(Number), "yes", "no"))

# 查看结果
df_des
#>   Number Day Letter first
#> 1      1   1      a   yes
#> 2      1   2      a    no
#> 3      1   3      a    no
#> 4      1   4      a    no
#> 5      2   1      b   yes
#> 6      2   2      b    no
#> 7      2   3      b    no
#> 8      2   4      b    no

扩展说明

如果序列的分组依据是多列(比如同时按Number和Letter分组),只需调整duplicated()的参数为对应列组合即可:

# 多列分组的序列起始标记
df$first <- ifelse(!duplicated(df[c("Number", "Letter")]), "yes", "no")

内容的提问来源于stack exchange,提问作者Daniel AG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:47:24