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

基于分组变量生成带重复ID的Survey与Rep变量的dplyr实现问题

解决方案

修正Rep变量的代码

你之前的Rep变量分组条件错误,需求是按Year、Date、City分组统计行数,需调整分组逻辑:

  • 若要生成组内每行对应的该组总行数(比如每组有2行,两行的Rep都是2),用:
df <- df %>% 
  group_by(Year, Date, City) %>% 
  mutate(Rep = n()) %>% 
  ungroup()
  • 若要生成组内的行序号(比如每组第1行是1,第2行是2),用:
df <- df %>% 
  group_by(Year, Date, City) %>% 
  mutate(Rep = row_number()) %>% 
  ungroup()

生成Survey变量

要实现同组(Year、Date、City)内相同Floor分配相同ID,可通过对分组内的Floor进行连续编码,推荐两种方法:

方法1:按出现顺序分配ID

df <- df %>% 
  group_by(Year, Date, City) %>% 
  mutate(Survey = match(Floor, unique(Floor))) %>% 
  ungroup()

该方法按Floor在分组内首次出现的顺序分配ID,相同Floor会得到相同的编号(如分组内Floor序列为A、A、B、B,对应Survey为1、1、2、2)。

方法2:按排序后分配ID

df <- df %>% 
  group_by(Year, Date, City) %>% 
  mutate(Survey = dense_rank(Floor)) %>% 
  ungroup()

dense_rank()会对Floor排序后分配连续ID:字符型Floor按字母顺序排序,数值型按大小排序,相同Floor的ID保持一致。

合并高效写法

可将两个变量的生成合并为一次管道操作,减少重复分组:

df <- df %>% 
  group_by(Year, Date, City) %>% 
  mutate(
    Survey = match(Floor, unique(Floor)),  # 替换为dense_rank(Floor)可切换排序后编码
    Rep = n()  # 替换为row_number()可生成组内行序号
  ) %>% 
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:08:26