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 greplany to get TRUE if any element has been matched to awhich elements (columns) are TRUE (i.e. contain the searched letter a).