如何将R数据框PN列的被试ID替换为对应ID持有者的VA变量得分
实现方案
你可以通过创建ID到VA值的映射向量,批量替换PN列的值实现需求,以下提供两种常用实现方式:
方法1:基础R实现
# 构造ID到VA的映射向量 va_map <- setNames(df$VA, df$ID) # 匹配所有PN开头的列 pn_cols <- grep("^PN", names(df), value = T) # 批量替换PN列值 df[pn_cols] <- lapply(df[pn_cols], function(x) va_map[as.character(x)])
方法2:tidyverse(dplyr)实现
library(dplyr) va_map <- setNames(df$VA, df$ID) df <- df %>% mutate(across(starts_with("PN"), ~va_map[as.character(.x)]))
注意:将PN列的值转为字符后再索引映射向量,是为了避免ID数值大于映射向量长度时,被错误识别为位置索引导致取值错误。
输出结果
运行上述代码后得到的结果和你预期的转换结果完全一致:
ID PN1 PN2 PN3 VA 1 1 0 1 0 7 2 2 7 1 NA 0 3 3 7 0 3 1 4 400 1 0 NA 3 5 5678 0 3 NA 0
内容的提问来源于stack exchange,提问作者Stefanie Richters
相关产品推荐
相关产品推荐

