R语言创建循环比较行数据,生成新变量存储个体首次观测type值
错误原因
你编写的循环代码问题出在赋值逻辑:每次判断后直接对整列df$first赋值,会覆盖该列所有行的取值,最终全列都会保留循环最后一次运行时的赋值结果,因此所有行的first值都相同。
解决方案
推荐优先使用向量化分组操作,代码更简洁也不容易出错,也可使用修正后的循环写法实现需求。
方法1:dplyr分组实现(推荐)
按id分组后提取每组内order_num == 1对应的type值,填充到组内所有行即可:
library(dplyr) df <- df %>% group_by(id) %>% mutate(first = type[order_num == 1]) %>% ungroup()
方法2:修正后的循环写法
如果需要用循环实现,需要逐行对df$first的单个位置赋值,而非整列赋值:
# 初始化新列 df$first <- NA # 循环逐行处理 for(i in 1:nrow(df)){ if(i == 1){ df$first[i] <- df$type[i] } else if(df$id[i] == df$id[i-1]){ df$first[i] <- df$first[i-1] } else { df$first[i] <- df$type[i] } }
内容的提问来源于stack exchange,提问作者amr262
相关产品推荐
相关产品推荐

