I have data frame like this :
df <- data.frame(col1 = c(letters[1:4],\"a\"),col2 = 1:5,col3 = letters[10:14])
df
col1 col2 col3
1 a 1 j
2 b
Since you mention you were trying to use sapply()
but were unsuccessful, here's how you can do it:
> sapply(df, function(x) any(x == "a"))
col1 col2 col3
TRUE FALSE FALSE
> which(sapply(df, function(x) any(x == "a")))
col1
1
Of course, you can also use the grep()
/grepl()
approach if you prefer string matching. You can also wrap your which()
function with unname()
if you want just the column number.
Something like this?
which(apply(df, 2, function(x) any(grepl("a", x))))
The steps are:
apply
go over each columna
is in this column with grepl
any
to get TRUE
if any element has been matched to a
which
elements (columns) are TRUE
(i.e. contain the searched letter a
).