質問

約40列のデータフレーム、2番目の列、データ[2]には、残りの行データが説明する会社の名前が含まれています。ただし、企業の名前は年によって異なります(2009年のデータでは09、2010年には何もありません)。

私は両方の年を一度に引き込むことができるようにデータをサブセットすることができるようにしたいと思います。これが私がやろうとしていることの例です...

subset(data, data[2] == "Company Name 09" | "Company Name", drop = T) 

基本的に、サブセット関数内でORオペレーターを使用するのが困難です。

しかし、私は他の選択肢を試しました:

subset(data, data[[2]] == grep("Company Name", data[[2]]))

おそらく、文字列関数を使用して簡単に行う方法がありますか?

どんな考えも評価されます。

役に立ちましたか?

解決

まず第一に(ジョナサンが彼のコメントで行ったように)2番目の列を参照するには、どちらも使用する必要があります data[[2]] また data[,2]. 。ただし、サブセットを使用している場合は、列名を使用できます。 subset(data, CompanyName == ...).

そして、あなたの質問のために、私は次のうちの1つをします

subset(data, data[[2]] %in% c("Company Name 09", "Company Name"), drop = TRUE) 
subset(data, grepl("^Company Name", data[[2]]), drop = TRUE)

2番目に使用します grepl (Rバージョン2.9で導入)は、論理ベクトルをで返します TRUE マッチ用。

他のヒント

いくつかのこと:

1)モックアップデータは、あなたが何に直面しているのか正確にわからないため有用です。可能であればデータを提供してください。たぶん私は何が続くのか誤解しましたか?

2)使用しないでください [[2]] data.frameをインデックスするために、[、 "colname"]ははるかに明確だと思います

3)唯一の違いが名前の後続の「09」である場合、単にそれを再現します:

R> x1 <- c("foo 09", "bar", "bar 09", "foo")
R> x2 <- gsub(" 09$", "", x1)
[1] "foo" "bar" "bar" "foo"
R> 

これで、オンザフライ変換されたデータでサブセットを実行できるはずです。

R> data <- data.frame(value=1:4, name=x1)
R> subset(data, gsub(" 09$", "", name)=="foo")
  value   name
1     1 foo 09
4     4    foo
R> 

また、名前列をregexp'ed値に置き換えることもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top