Mar*_*nie 5 r filter dplyr mutate
id first middle last Age
1 Carol Jenny Smith 15
2 Sarah Carol Roberts 20
3 Josh David Richardson 22
Run Code Online (Sandbox Code Playgroud)
我正在尝试在任何名称列(第一,中间,最后)中找到一个特定的名称。例如,如果我找到了一个名字叫Carol的人(无论名字/中间名/姓氏都没关系),我想对“ Carol”列进行突变并给出1。所以我想要的是以下内容
id first middle last Age Carol
1 Carol Jenny Smith 15 1
2 Sarah Carol Roberts 20 1
3 Josh David Richardson 22 0
Run Code Online (Sandbox Code Playgroud)
我一直在尝试ifelse(c(first,middle,last)==“ Carol”,1,0)或“ Carol”%in%首先...等,但是由于某种原因,我只能处理一个列而不是多个列专栏..有人可以帮我吗?先感谢您!
我们可以用 rowSums
df$Carol <- as.integer(rowSums(df[2:4] == "Carol") > 0)
df
# id first middle last Age Carol
#1 1 Carol Jenny Smith 15 1
#2 2 Sarah Carol Roberts 20 1
#3 3 Josh David Richardson 22 0
Run Code Online (Sandbox Code Playgroud)
如果我们需要它作为功能
fun <- function(df, value) {
as.integer(rowSums(df[2:4] == value) > 0)
}
fun(df, "Carol")
#[1] 1 1 0
fun(df, "Sarah")
#[1] 0 1 0
Run Code Online (Sandbox Code Playgroud)
但这假设您要搜索的列在position处2:4。
赋予列位置更多的灵活性
fun <- function(df, cols, value) {
as.integer(rowSums(df[cols] == value) > 0)
}
fun(df, c("first", "last","middle"), "Carol")
#[1] 1 1 0
fun(df, c("first", "last","middle"), "Sarah")
#[1] 0 1 0
Run Code Online (Sandbox Code Playgroud)