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


我有这样的数据框:

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但它不工作。 有人知道怎么做没有循环?


6476
2017-10-25 05:53


起源



答案:


像这样的东西?

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

步骤是:

  1. apply 仔细阅读每一栏
  2. 搜索是否 a 在这个专栏中 grepl
  3. 因为我们得到了一个向量,所以请使用 any 要得到 TRUE 如果有任何元素匹配 a
  4. 最后检查 which 元素(列)是 TRUE (即包含搜索到的信件 a)。

13
2017-10-25 06:18



非常感谢@jmsigner。 - user1021713


答案:


像这样的东西?

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

步骤是:

  1. apply 仔细阅读每一栏
  2. 搜索是否 a 在这个专栏中 grepl
  3. 因为我们得到了一个向量,所以请使用 any 要得到 TRUE 如果有任何元素匹配 a
  4. 最后检查 which 元素(列)是 TRUE (即包含搜索到的信件 a)。

13
2017-10-25 06:18



非常感谢@jmsigner。 - user1021713


既然你提到你试图使用 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() 如果你只想要列号。


3
2017-10-25 07:22



非常感谢这个解决方案...... - user1021713