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

如何在R中基于结束标记为分词添加连续句子标签?

这问题我熟!要给每个句子按顺序加标签,其实用dplyr里的cumsum()配合lag()就能轻松搞定,思路是根据stop列的标记来累计句子数:

完整实现代码(dplyr版本)

首先先定义你的原始数据(推荐用tibble()替代data_frame(),这是dplyr当前的标准写法):

library(dplyr)

# 原始数据
df <- tibble(
  word = c("I'm", "going", "to", "be", "sick", "I", "want", "to", "go", "home"),
  stop = c(FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE)
)

接着新增句子标签列:

# 生成句子编号
df2 <- df %>%
  mutate(
    sentence_id = cumsum(lag(stop, default = FALSE)) + 1
  )

代码逻辑解释

  • lag(stop, default = FALSE):把stop列整体向后偏移一位,第一个元素用FALSE填充。这样每一行的结果就代表上一个单词是否是句子结尾。
  • cumsum():累计这个偏移后的stop值,每遇到一个TRUE(即上一个单词是句子结尾),累计数就加1。
  • 最后+1:让第一个句子的编号从1开始,避免出现从0起步的情况。

运行后得到的df2就是你要的结果:

# 查看最终结果
df2
#> # A tibble: 10 × 3
#>    word  stop  sentence_id
#>    <chr> <lgl>       <dbl>
#>  1 I'm   FALSE           1
#>  2 going FALSE           1
#>  3 to    FALSE           1
#>  4 be    FALSE           1
#>  5 sick  TRUE            1
#>  6 I     FALSE           2
#>  7 want  FALSE           2
#>  8 to    FALSE           2
#>  9 go    FALSE           2
#> 10 home  TRUE            2

不用dplyr的Base R版本

如果不想加载dplyr包,用Base R也能实现相同效果:

# Base R 写法
df$sentence_id <- cumsum(c(FALSE, head(df$stop, -1))) + 1

这里head(df$stop, -1)去掉了stop列的最后一个元素,前面补FALSE,和lag()的作用完全一致,再累计求和加1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:45:28