R语言实现列值匹配外部向量时更新dataframe对应元素
R语言按向量匹配更新数据框指定列值
前置定义
首先是题目给出的初始变量:
- 用于匹配的向量:
a <- c(4,2,9,2)
- 待处理的初始数据框:
df <- structure(list(indx = 1:10, explore_ind = c("dark", "dark", "dark", "dark", "dark", "dark", "dark", "dark", "dark", "dark")), row.names = c(NA, 10L), class = "data.frame")
处理规则:如果某行indx列的取值存在于向量a中,就把该行explore_ind列的值从dark替换为light。
实现方案
方案1:原生R实现(无需加载第三方包)
直接用R内置的%in%运算符做存在性判断,对匹配到的行直接赋值即可,代码非常简洁:
df$explore_ind[df$indx %in% a] <- "light"
运行后打印df就能得到预期结果:
indx explore_ind 1 1 dark 2 2 light 3 3 dark 4 4 light 5 5 dark 6 6 dark 7 7 dark 8 8 dark 9 9 light 10 10 dark
注意:
%in%做存在性判断时会自动忽略匹配向量里的重复值,本例中向量a里2出现了两次,不需要额外手动去重,判断结果不会受影响。
方案2:dplyr包实现(适合管道操作流场景)
如果日常数据处理习惯用tidyverse系列的dplyr包,可以用mutate搭配ifelse实现:
library(dplyr) df <- df %>% mutate(explore_ind = ifelse(indx %in% a, "light", explore_ind))
两种方案运行结果完全一致。
内容的提问来源于stack exchange,提问作者locket
相关产品推荐
相关产品推荐

