如何在RStudio中生成同id下对应其他行被照料者年龄的新变量
R实现按家庭ID匹配被照料者年龄的解决方案
你可以通过dplyr包快速实现该需求,核心逻辑为按家庭ID分组后,匹配同组内rank值与care值一致的记录,提取对应年龄即可,具体操作步骤如下:
1. 安装加载依赖包
如果未安装dplyr先执行安装,已安装可直接加载:
# 安装包(仅需执行一次) install.packages("dplyr") # 加载包 library(dplyr)
2. 构造示例测试数据
你可以直接运行以下代码生成和你示例一致的测试数据验证效果:
df <- data.frame( id = c(1,1,2,2,2,3,3,4,4,4), rank = c(1,2,1,2,3,1,2,1,2,3), age = c(20,2,30,28,4,26,3,22,23,1), sex = c("female","female","male","female","male","female","male","female","male","male"), care = c(2,NA,3,NA,NA,2,NA,NA,3,NA) )
3. 核心计算代码
仅需3行代码即可生成目标new字段:
df <- df %>% group_by(id) %>% mutate(new = age[match(care, rank)]) %>% ungroup()
代码逻辑说明
group_by(id):按照家庭id分组,所有计算仅在同家庭内生效match(care, rank):找到当前行care值在同组rank列中对应的位置age[对应位置]:提取对应位置的age值赋值给new字段,care为NA时自动返回NA
运行后得到的结果和你给出的示例完全一致。
内容的提问来源于stack exchange,提问作者Darwin Galvis
相关产品推荐
相关产品推荐

