R语言根据dataframe指定列字符串值填充新列为其他列数值
R语言多条件列填充实现方案
前提说明
R的数值类型变量无法存储|这类非数字符号,因此无法在保留数值类型的同时实现V1|V2的展示效果,以下提供两种符合需求的可选实现方案。
先构造示例数据:
df <- structure(list(V1 = 1:10, V2 = 6:15, V3 = c("P", "P", "N", "B", "P", "B", "N", "N", "P", "P")), row.names = c(NA, -10L), class = "data.frame")
方案1:实现V1|V2展示效果(V4为字符型)
该方案输出完全匹配期望展示格式,V4为字符类型。
基础R实现
df$V4 <- ifelse(df$V3 == "P", df$V1, ifelse(df$V3 == "N", df$V2, paste(df$V1, df$V2, sep = "|")))
tidyverse实现
library(dplyr) df <- df %>% mutate(V4 = case_when( V3 == "P" ~ as.character(V1), V3 == "N" ~ as.character(V2), V3 == "B" ~ paste(V1, V2, sep = "|") ))
方案2:保持V4为数值型(B类取V1/V2较大值)
该方案输出的V4为纯数值类型,可直接参与后续数值计算,V3为"B"时取两列最大值。
基础R实现
df$V4 <- ifelse(df$V3 == "P", df$V1, ifelse(df$V3 == "N", df$V2, pmax(df$V1, df$V2)))
tidyverse实现
library(dplyr) df <- df %>% mutate(V4 = case_when( V3 == "P" ~ V1, V3 == "N" ~ V2, V3 == "B" ~ pmax(V1, V2) ))
内容的提问来源于stack exchange,提问作者Mr.Spock
相关产品推荐
相关产品推荐

