You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将Stata命令`by city, sort : egen float total_population = total(id)`转换为等价的R命令?

将Stata命令转换为等价的R实现

没问题!我来帮你把这条Stata命令转换成等价的R代码。先明确需求:我们需要按city字段分组,计算每组内唯一id的数量,再给每一行添加上这个统计值作为新变量total_population(从你的示例结果来看,原Stata命令实际是计算分组内不同id的个数,对应Stata的egen total_population = nvals(id),不过我们按你的预期输出实现)。

方法一:使用dplyr包(推荐,代码更直观易读)

dplyr是R中处理数据框的常用工具包,代码逻辑和Stata的分组操作很相似:

# 先加载dplyr包(如果没安装先运行install.packages("dplyr"))
library(dplyr)

# 定义示例数据框
df <- data.frame(
  id = c(1,1,1,2,2,3,6,7,8,9,10),
  city = c("a","a","a","r","r","r","h","h","h","h","h")
)

# 执行分组计算并生成新变量
df <- df %>%
  group_by(city) %>%          # 按city字段分组
  mutate(total_population = n_distinct(id)) %>%  # 计算每组内唯一id的数量,生成新变量
  ungroup()                   # 取消分组(避免后续操作受分组状态影响)

# 查看结果
print(df)

方法二:使用基础R(无需额外安装包)

如果你不想加载第三方包,可以用基础R的ave()函数实现:

# 定义示例数据框
df <- data.frame(
  id = c(1,1,1,2,2,3,6,7,8,9,10),
  city = c("a","a","a","r","r","r","h","h","h","h","h")
)

# 生成新变量
df$total_population <- ave(df$id, df$city, FUN = function(x) length(unique(x)))

# 查看结果
print(df)

运行以上任意一种代码,都会得到你预期的输出结果:

id city total_population
1   1    a                1
2   1    a                1
3   1    a                1
4   2    r                2
5   2    r                2
6   3    r                2
7   6    h                5
8   7    h                5
9   8    h                5
10  9    h                5
11 10    h                5

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

火山引擎 最新活动