12

私はこのようなデータフレームを持っています:

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で使用してみましたが、動作しません。誰もがループなしでそれを行う方法を知っていますか?

4

2 に答える 2

16

このようなもの?

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

手順は次のとおりです。

  1. apply各列に移動します
  2. aがこの列にあるかどうかを検索しますgrepl
  3. ベクターを取得するため、一致する要素があるかどうかanyを取得するために使用しますTRUEa
  4. 最後に、which要素 (列) がTRUE(つまり、検索された文字を含む) であることを確認しますa
于 2012-10-25T06:18:16.193 に答える
5

使用しようとして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()

于 2012-10-25T07:22:29.060 に答える