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

如何在R语言中按stratum分组生成符合条件的新变量weights?

解决R语言分组赋值weights变量的问题

没问题,我来帮你搞定这个需求!你需要按stratum分组,把每组中status=1对应的death值,赋值给该组所有行的新变量weights,下面给你两种常用的实现方法:

方法一:使用dplyr(tidyverse风格)

这种方法代码可读性高,是数据处理中很常用的方式:

首先加载dplyr包(如果没安装的话先运行install.packages("dplyr")):

library(dplyr)

# 你的原始数据框
df = data.frame(status = c(1, 0, 0, 0, 1, 0, 0, 0), stratum = c(1,1,1,1, 2,2,2,2), death = 1:8)

# 生成weights变量
df_wanted <- df %>%
  group_by(stratum) %>%
  mutate(weights = death[status == 1]) %>%
  ungroup() # 记得取消分组,避免后续操作受影响

# 查看结果
df_wanted

运行后输出:

# A tibble: 8 × 4
  status stratum death weights
   <dbl>   <dbl> <int>   <int>
1      1       1     1       1
2      0       1     2       1
3      0       1     3       1
4      0       1     4       1
5      1       2     5       5
6      0       2     6       5
7      0       2     7       5
8      0       2     8       5

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

如果不想加载第三方包,可以用base R的ave()函数实现,它专门用于分组计算:

# 你的原始数据框
df = data.frame(status = c(1, 0, 0, 0, 1, 0, 0, 0), stratum = c(1,1,1,1, 2,2,2,2), death = 1:8)

# 生成weights变量
df$weights <- with(df, ave(death, stratum, FUN = function(x, s) x[s == 1], s = status))

# 查看结果
df

运行后得到的结果和上面完全一致,就是你想要的df_wanted。

注意点

两种方法都默认每组中只有一个status=1的行,如果你的实际数据中一组可能有多个status=1的情况,需要提前处理(比如取第一个、最后一个或者平均值),不过从你的示例数据来看,每组刚好一个,所以上面的代码完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:49:37