如何在R中识别序列终止并生成标记变量
R语言新手求助:为分组序列添加终止标记变量
我是R语言新手,首次提问,若该问题已有解答敬请谅解。
我需要在数据集中按id识别序列,为每个id的最后一条记录添加终止标记。
示例输入数据集
| id | lengthofstay |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
| 3 | 4 |
期望输出结果
| id | lengthofstay | newvariable |
|---|---|---|
| 1 | 1 | 0 |
| 1 | 2 | 0 |
| 1 | 3 | 1 |
| 2 | 1 | 0 |
| 2 | 2 | 1 |
| 3 | 1 | 0 |
| 3 | 2 | 0 |
| 3 | 3 | 0 |
| 3 | 4 | 1 |
我希望创建newvariable,序列进行时取值为0,序列终止(即每个id的最后一行)时取值为1,目前毫无头绪,恳请帮助,如有需要可补充更多信息。
解决方案
这里提供两种两种实现方式,适合不同使用习惯:
方法一:使用dplyr包(推荐,逻辑清晰易读)
如果还没安装dplyr,先执行安装命令:
install.packages("dplyr")
加载包并处理数据(假设你的数据集存储在数据框df中):
library(dplyr) df <- df %>% group_by(id) %>% mutate(newvariable = ifelse(row_number() == n(), 1, 0)) %>% ungroup()
group_by(id):按id分组,确保只在每个id的范围内判断序列终止row_number():返回当前组内的行序号n():返回当前组的总行数ifelse判断:如果是组内最后一行则赋值1,否则赋值0
方法二:使用基础R(无需额外安装包)
# 标记每组最后一行(逻辑值转数字) df$newvariable <- as.integer(with(df, ave(lengthofstay, id, FUN = function(x) seq_along(x) == length(x))))
ave():按id分组执行自定义函数seq_along(x) == length(x):判断当前行是否为组内最后一行,返回逻辑值后转成0/1数字
内容的提问来源于stack exchange,提问作者cyoonit
相关产品推荐
相关产品推荐

