r - 如何查找ANY列是否具有我要查找的特定值?

标签 r filter dplyr mutate

   id first  middle  last       Age
    1 Carol  Jenny   Smith      15
    2 Sarah  Carol   Roberts    20
    3 Josh   David   Richardson 22

我正在尝试在任何名称列(第一,中间,最后)中找到一个特定的名称。例如,如果我找到了一个名字叫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

我已经试了
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

如果我们需要它作为功能
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

但这假设您要搜索的列位于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

关于r - 如何查找ANY列是否具有我要查找的特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55402065/

相关文章:

python - Python 中是否有一个模块可以为 R 执行类似 "sqldf"的操作?

r - 熔化 + strsplit,或与聚合相反

r - 如何将同一个函数应用于R中的多个变量?

javascript - 简单的 Angular JS 过滤器不起作用

r - rename.sf(.tbl, !!!syms) 错误 : internal error: can't find `agr` columns

r - dplyr 和中间管道消息

r - 没有循环的数据框中的子字符串,填充和粘贴列

linux - 关于如何使用脚本制作过滤器的问题

data-binding - 聚合物 Dart : Data bind integer value to String attribute

r - 用于创建多个数据框和赋值的 for 循环