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

如何使用dplyr为id关联的纵向数据按规则创建新变量

完全可以通过dplyr实现该需求,具体操作步骤如下:

步骤1:自定义众数计算函数

R基础包没有内置众数计算函数,我们先定义一个简单的求众数函数:

get_mode <- function(v) {
  uniqv <- unique(v)
  # 返回出现次数最多的第一个值,若需处理多众数场景可自行调整逻辑
  uniqv[which.max(tabulate(match(v, uniqv)))]
}

步骤2:通过dplyr处理数据

我们先计算每个id对应的x列众数生成映射表,再将原数据的id2与映射表匹配得到y值:

library(dplyr)

# 示例数据
id <- c(1, 1, 1, 2, 2, 2)
id2 <- c(NA, NA, NA, 1, 1, 1)
x <- c(4, 5, 5, 1, 1, 1)
dat1 <- data.frame(id, id2, x)

# 生成每个id对应的x众数映射表
id_mode_map <- dat1 %>%
  group_by(id) %>%
  summarise(x_mode = get_mode(x), .groups = "drop")

# 匹配得到y值
dat_result <- dat1 %>%
  left_join(id_mode_map, by = c("id2" = "id")) %>%
  rename(y = x_mode)

输出结果验证

运行后得到的dat_result和预期结果完全一致:

> dat_result
  id id2 x y
1  1  NA 4 NA
2  1  NA 5 NA
3  1  NA 5 NA
4  2   1 1 5
5  2   1 1 5
6  2   1 1 5

内容的提问来源于stack exchange,提问作者C.F.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:03