如何按元素名称将Vec2从Vec1中减去(缺失名称视为0)
按名称匹配从Vec1中减去Vec2的简便方法
当然有,给你几种实用的实现方式:
基础R分步实现(清晰易懂)
先把Vec2按照Vec1的名称对齐,缺失的名称对应值设为0,再做减法:# 按Vec1的名称提取Vec2对应值,缺失的返回NA vec2_aligned <- Vec2[names(Vec1)] # 将NA替换为0 vec2_aligned[is.na(vec2_aligned)] <- 0 # 执行减法 result <- Vec1 - vec2_aligned执行后
result的结果为:Val1=1, Val2=-8, Val3=3, Val4=-7基础R一行简洁写法
把步骤合并成一行,适合追求代码简洁的场景:result <- Vec1 - replace(Vec2[names(Vec1)], is.na(Vec2[names(Vec1)]), 0)tidyverse工具链实现(适合习惯该生态的用户)
若平时常用tidyverse,可以将向量转成数据框处理:library(dplyr) library(tibble) result <- tibble(name = names(Vec1), val1 = Vec1) %>% left_join(tibble(name = names(Vec2), val2 = Vec2), by = "name") %>% mutate(val2 = replace_na(val2, 0), result = val1 - val2) %>% pull(result) %>% set_names(.$name)
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

