条件匹配
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))
我有两个变量。我想看看一个变量是否在另一个变量中。基于此匹配,我希望 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))