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

