RStudio中使用条件循环替换列值为对应变量名问题求助
问题原因
- 你写的
data.table操作仅生成了临时字符串,没有使用:=赋值运算符修改原对象,因此dt不会发生任何变化 - 现有
paste逻辑会将所有变量名拼接后加序号,完全不符合“1对应第一个变量名、2对应第二个变量名”的映射需求
最优解决方案(无需循环,适配多变量场景)
你只需要提前构造和序号一一对应的变量名向量,通过下标映射即可一行完成替换,后续402个变量的场景也可以直接复用该逻辑:
# 构造1-17对应的变量名向量,第N个元素对应V1=N的替换值 var_names <- c( "upps_negative_urgency", "upps_lack_of_perseverance", "upps_lack_of_premeditation","upps_positive_urgency", "upps_sensation_seeking", "cash_choice_task","BIS", "BAS_Reward_Responsiveness","BAS_Drive", "BAS_funseeking", "ddis_scr_expr_mnrt_allcho", "ddis_scr_expr_medrt_allcho", "ddis_scr_expr_mnrt_immcho", "ddis_scr_expr_medrt_immcho", "ddis_scr_expr_mnrt_delaycho", "ddis_scr_expr_medrt_delaycho", "ddis_scr_expr_mnrt_diffcho" ) # 直接通过下标映射完成替换,仅修改V1取值为1-17的行 dt[V1 %in% 1:17, V1 := var_names[V1]]
循环版本(如果你需要保留循环写法的修正版)
如果确实需要用循环实现,修正写法如下:
var_names <- c( "upps_negative_urgency", "upps_lack_of_perseverance", "upps_lack_of_premeditation","upps_positive_urgency", "upps_sensation_seeking", "cash_choice_task","BIS", "BAS_Reward_Responsiveness","BAS_Drive", "BAS_funseeking", "ddis_scr_expr_mnrt_allcho", "ddis_scr_expr_medrt_allcho", "ddis_scr_expr_mnrt_immcho", "ddis_scr_expr_medrt_immcho", "ddis_scr_expr_mnrt_delaycho", "ddis_scr_expr_medrt_delaycho", "ddis_scr_expr_mnrt_diffcho" ) for (i in 1:17) { dt[V1 == i, V1 := var_names[i]] }
内容的提问来源于stack exchange,提问作者faye
相关产品推荐
相关产品推荐

