标识R中包含给定字符串的列

标识R中包含给定字符串的列,r,string,detect,R,String,Detect,我试图为每一行创建一个函数,用于标识出现指定字符串的列的名称 例如,在这个数据集中,假设我从第1-3行开始。我想创建一个新列所需的\u列,其中包含出现“foo”的行 row1您可以执行以下操作: df$desired_column <- names(df)[max.col(cbind(df, FALSE) == "foo", ties.method = "last")] 使用cbind(df,FALSE)确保在任何特定行中没有匹配项时返回NA 针对您的评论,grepl()可用于部分匹配,

我试图为每一行创建一个函数,用于标识出现指定字符串的列的名称

例如,在这个数据集中,假设我从第1-3行开始。我想创建一个新列
所需的\u列
,其中包含出现“foo”的行

row1您可以执行以下操作:

df$desired_column <- names(df)[max.col(cbind(df, FALSE) == "foo", ties.method = "last")]
使用
cbind(df,FALSE)
确保在任何特定行中没有匹配项时返回
NA

针对您的评论,
grepl()
可用于部分匹配,或
agrepl()
可用于模糊匹配:

row1 <- c('a', 'b', 'c', 'fool')
row2 <- c('foo', 'a', 'foo', 'b')
row3<- c('b', 'foo', 'b', 'b')
df <- data.frame(row1, row2, row3)
df$desired <- max.col(cbind(sapply(df, grepl, pattern = "foo"), FALSE), ties.method = "last")
你可以做:

df$desired_column <- names(df)[max.col(cbind(df, FALSE) == "foo", ties.method = "last")]
使用
cbind(df,FALSE)
确保在任何特定行中没有匹配时返回
NA

针对您的评论,
grepl()
可用于部分匹配,或
agrepl()
可用于模糊匹配:

row1 <- c('a', 'b', 'c', 'fool')
row2 <- c('foo', 'a', 'foo', 'b')
row3<- c('b', 'foo', 'b', 'b')
df <- data.frame(row1, row2, row3)
df$desired <- max.col(cbind(sapply(df, grepl, pattern = "foo"), FALSE), ties.method = "last")

你看到这个帖子了吗?你看到这个帖子了吗?谢谢你。你能把这个答案扩展到单元格不完全匹配的情况吗?例如,如果其中一个单元格值是“傻瓜”,我仍然希望它创建一个正匹配。我尝试在%中使用%,但没有得到相同的结果。谢谢。你能把这个答案扩展到单元格不完全匹配的情况吗?例如,如果其中一个单元格值是“傻瓜”,我仍然希望它创建一个正匹配。我尝试在%中使用%,但没有得到相同的结果。
  row1 row2 row3 desired
1    a  foo    b    row2
2    b    a  foo    row3
3    c  foo    b    row2
4 fool    b    b    row1