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
相关产品推荐
相关产品推荐

