在R数据框中基于另一分类变量重编码分类变量的方法
在R数据框中实现Var1的条件重编码
先看示例数据和期望结果:
# 示例数据 df <- data.frame( Var1 = c(1, 2, 3, 4, 5), Var2 = c(NA, 20, 30, NA, 50) ) # 期望得到的结果 # Var1 Var2 Var3 # 1 1 NA 1 # 2 2 20 20 # 3 3 30 30 # 4 4 NA 4 # 5 5 50 50
下面是几种实用的实现方式:
方法1:Base R 原生实现
用ifelse()函数直接搞定,逻辑清晰:
df$Var3 <- ifelse(!is.na(df$Var2), df$Var2, df$Var1)
逻辑很简单:判断Var2是不是非NA,是就用Var2的值,不是就保留Var1的原值。
方法2:dplyr 风格实现
如果你习惯用tidyverse工具链,推荐这两种写法:
写法一:用if_else()
library(dplyr) df <- df %>% mutate(Var3 = if_else(!is.na(Var2), Var2, Var1))
if_else()比base R的ifelse()类型检查更严格,数据类型一致时用它更稳妥。
写法二:用coalesce()(更简洁)
coalesce()会返回传入参数里第一个非NA的值,完美匹配你的需求:
df <- df %>% mutate(Var3 = coalesce(Var2, Var1))
这里先看Var2,只要它不是NA就用它,否则就用Var1,一行代码搞定。
方法3:data.table 高效实现
如果处理的是超大数据集,用data.table速度更快:
library(data.table) # 用fifelse实现 setDT(df)[, Var3 := fifelse(!is.na(Var2), Var2, Var1)] # 或者用fcoalesce更简洁 setDT(df)[, Var3 := fcoalesce(Var2, Var1)]
内容的提问来源于stack exchange,提问作者Hazem
相关产品推荐
相关产品推荐

