条件匹配

Conditional matching

我有两个变量。我想看看一个变量是否在另一个变量中。基于此匹配,我希望 return 来自与该匹配行关联的同一数据集的值到新变量中。条件是如果它不匹配我想使用其中一个变量的值。

df
Name              Name1             Name2 
Natalie             Shawn              Edmund
Desmond             Desmond            James
Kylie               Kylie             Brent

期望的输出

 df
Name          Name1             Name2            Fullname
Natalie     Shawn              Edmund            Natalie
Desmond     Desmond            Desmond James     Desmond James
Kylie       Kylie            Kylie Brent        Kylie Brent

我试过:

df$Fullname <- (df$Name2[match(df$Name, df$Name1)])

这给了我全名变量(即 Desmond James 和 Kylie Brent)。我挣扎的地方是条件部分和 return 变量不匹配时的值。我已经考虑过进行 ifelse 嵌套编码,但我想保留它,因为我的数据集相当大。

感谢您的帮助!

我们可以用 ifelse 创建一个条件(假设列是 character class)

df$Fullname <- with(df, ifelse(Name == Name1 & !is.na(Name), 
                     paste(Name, Name2), Name))
df$Fullname
#[1] "Natalie"       "Desmond James" "Kylie Brent"  

dplyr

library(dplyr)
library(stringr)
df %>%
   mutate(Fullname = case_when(Name == Name1 ~ str_c(Name, Name), TRUE ~ Name))

数据

df <- structure(list(Name = c("Natalie", "Desmond", "Kylie"), Name1 = c("Shawn", 
"Desmond", "Kylie"), Name2 = c("Edmund", "James", "Brent")),
class = "data.frame", row.names = c(NA, 
-3L))