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

R语言计算相同元素两次出现的间隔行数实现方法

R实现计算元素与上一次出现位置的间隔行数

核心逻辑是按word字段分组,计算当前行号与上一次同分组行号的差值即可得到间隔行数,首次出现的元素会返回NA,和你给出的示例结果完全匹配。

方法1:使用dplyr包(推荐,语法简洁)

# 加载dplyr包
library(dplyr)

# 你的示例数据
word <- c ('a', 'b', 'c', 'b', 'd', 'e', 'e', 'f', 'b')
repeated <- c('nr', 'r', 'nr', 'r', 'nr', 'r', 'r', 'nr', 'r')
ds <- as.data.frame(cbind(word, repeated))

# 计算distance列
ds <- ds %>%
  # 新增行号列
  mutate(row_id = row_number()) %>%
  # 按word分组
  group_by(word) %>%
  # 计算当前行号减去上一行号,得到间隔
  mutate(distance = row_id - lag(row_id)) %>%
  # 取消分组
  ungroup() %>%
  # 删除临时的行号列
  select(-row_id)

方法2:使用base R实现(无需安装额外包)

# 示例数据同上
word <- c ('a', 'b', 'c', 'b', 'd', 'e', 'e', 'f', 'b')
repeated <- c('nr', 'r', 'nr', 'r', 'nr', 'r', 'r', 'nr', 'r')
ds <- as.data.frame(cbind(word, repeated))

# 新增行号
ds$row_id <- seq_len(nrow(ds))
# 按word分组计算差值
ds$distance <- ave(ds$row_id, ds$word, FUN = function(x) c(NA, diff(x)))
# 删除临时行号列
ds$row_id <- NULL

两种方法输出的distance列均为 NA NA NA 2 NA NA 1 NA 5,和预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:24:02