在数据框中查找包含字符串值的列的索引

时间:2012-10-25 05:53:52

标签: r dataframe

我有这样的数据框:

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    2    k
3    c    3    l
4    d    4    m
5    a    5    n

我想找到df列的索引,其值与字符串“a”匹配。 即它应该给我1作为结果。 我尝试使用它在sapply但它不工作。 任何人都知道怎么做没有循环?

2 个答案:

答案 0 :(得分:13)

这样的东西?

 which(apply(df, 2, function(x) any(grepl("a", x))))

步骤如下:

  1. apply遍历每一栏
  2. 使用a
  3. 搜索此列中的grepl
  4. 由于我们收到了一个向量,如果有任何元素与any匹配,请使用TRUE获取a
  5. 最后检查which元素(列)是TRUE(即包含搜索到的字母a)。

答案 1 :(得分:3)

既然你提到你试图使用sapply()但是没有成功,那么你可以这样做:

> sapply(df, function(x) any(x == "a"))
 col1  col2  col3 
 TRUE FALSE FALSE 
> which(sapply(df, function(x) any(x == "a")))
 col1 
    1

当然,如果您更喜欢字符串匹配,也可以使用grep() / grepl()方法。如果您只想要列号,也可以使用which()包裹unname()函数。