2017-02-05 7 views
1

data.frameを複数の基準に基づいて検索するにはどうすればよいですか?例えば、私は、このようなDateTimeItemValueとして列を持つdata.frameを持っている、と私は、私はDate = 1/2/2010Time = 5pmItem = CarValue = 5を持ってdata.frameを検索したい、私はそれを行うことを可能にする機能がありますか?さらに重要なことは、これらの値を持つデータフレームの行インデックスを取得するにはどうすればよいですか?Rのデータフレームを検索する

たとえば、これらの値はすべてデータフレームの3番目の行にあります。データフレームを1行ずつ検索し、そのインデックスを出力する関数がありますか?

答えて

3

質問の実行に関する質問があります。 dplyrパッケージに精通している場合は、selectなどの機能が役立ちます。ただし、basestatsのパッケージを使用するだけで、必要なものを達成できるはずです。

たとえば、データフレームがある場合、条件に一致する行インデックスを抽出する必要があります。あなたはwhich機能を使用することによって、これを達成することができます

indices <- which(data$Date == "1/2/2010" & data$Time == "5pm" & data$Item =="Car" & data$Value == 5) 

その後、あなたは私が上記の仮想的な例は、あなたが必要な答えを得るのを助けるでしょう願ってい

data_subset <- data[indices, ] 

をサブセットに準備ができていると思います。

2

あなたは、次のコードとして "どの" 使用することができます:

df <- data.frame(cbind(Date = '1/2/2010', Time = '5pm', Item = 'Car', Value = 50000)) 
new <- data.frame(cbind(Date = '1/3/2010', Time = '6am', Item = 'keys', Value = 100)) 
df <- rbind(df, new) 

searchIndex1 <- function(dd, tt, itm, val){ 
which(df$Date==dd & df$Time== tt & df$Item ==itm & df$Value == val) 
} 
searchIndex1(dd='1/3/2010', tt='6am', itm='keys', val=100) 

これは、インデックス番号2

を返します。それとも、 "フィルタ" を使用することがあります。

searchIndex2 <- function(dd, tt, itm, val){ 
    df.with.index <- mutate(df, IDX = 1:n()) 
    result <- filter(df.with.index,(Date==dd & Time== tt & Item ==itm & Value == val))$IDX 
} 

searchIndex2(dd='1/2/2010', tt='5pm', itm='Car', val=50000) 

それは、インデックス1を返します。

関連する問題