質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

912閲覧

R 文字列抽出がしたい

0419OKAMON

総合スコア11

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2018/01/23 10:44

編集2018/01/24 13:29

Rでデータフレームの抽出がしたい。

扱うデータは以下の形です。
データフレーム ...df1
|name|year|...|
|:--|:--:||
|A社|1999|...|
|A社|2000|...|
|A社|2001|...|
|A社|2002|...|
|B社|1999|...|
|B社|2000|...|
|C社|2001|...|
|C社|2002|...|
|D社|1999|...|
|D社|2000|...|
|D社|2001|...|
|E社|2002|...|

このデータの中から1999年∼2001年のデータが'全て'揃っている企業を抽出がしたいです。

現状では、以下のようなデータフレームになります。
試したコード

R

1search<-c("1999","2000","2001")#抽出したい年度 2df2 <- df1[df1$year %in% search,]

結果 df2
|name|year|...|
|:--|:--:||
|A社|1999|...|
|A社|2000|...|
|A社|2001|...|
|B社|1999|...|
|B社|2000|...|
|C社|2001|...|
|D社|1999|...|
|D社|2000|...|
|D社|2001|...|

この形ではB社の2001年度のデータと
C社の1999年度と2000年度のデータが無いのにも関わらず
抽出されています。

そうではなく、次のデータフレームの形で抽出したいです。
|name|year|...|
|:--|:--:||
|A社|1999|...|
|A社|2000|...|
|A社|2001|...|
|D社|1999|...|
|D社|2000|...|
|D社|2001|...|

言葉不足かも知れませんが、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

all %in% を組合わせればよさそうです。こんな感じ?

R

1df1 <- read.table("test.txt", header=T, sep="\t", stringsAsFactors=F) 2 3y <- c(1999:2005) 4hit <- c() 5 6for(coname in unique(df1$"企業名")){ 7 if(all(y %in% df1[df1$"企業名"==coname,"年度"])){ 8 print(paste("yes", coname)) 9 hit <- c(hit, coname) 10 }else{ 11 print(paste("no", coname)) 12 } 13} 14

求める会社名がhitに入る筈。

投稿2018/01/23 16:49

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0419OKAMON

2018/01/24 08:14

申し訳ございません。 言葉不足でした。 1999年から2005年のデータが揃っているデータフレームを新たに作りたいです。 上記のコードでは未定義の列が選ばれました。となりました。 もう一度アドバイスいただけませんか?
KojiDoi

2018/01/24 08:28

newdf <- df1[df1[,1]%in%hit,]
0419OKAMON

2018/01/24 09:39

ありがとうございます。 ですが、望んでいた結果と違いました。 newdf <- subset(df1,year %in% search) search<-c("1999","2000","2001","2002","2003","2004","2005") をした際に抽出されるデータはsearchに含まれている OR で抽出されています。それをANDで行いたいです。
KojiDoi

2018/01/24 09:59

貴方の説明からは試した事の前後関係が掴めないし あなたの言う 「望んでいた結果」 がどんな物なのか理解できません。 コチラは適当に想像するしか無いのですよ。 newdf <- subset(df1,year %in% search) ここでいうsearchはどういうものを想定しているのですか? 最終的に search<-c("1999","2000","2001","2002","2003","2004","2005") とすればsubsetの結果に関わらず searchには数値が5個入ったベクトルができるだけでandもorもクソもありません。 最終的に得たい結果の実例をキチンと示してください。質問で手を抜いて丸投げしないこと。
0419OKAMON

2018/01/24 13:33

申し訳ございませんでした。 質問を追記・変更しましたので、よろしくお願い致します。 Searchは抽出したい年度を入れ、その結果をSubsetした結果が上記の質問のdf2になりました。
KojiDoi

2018/01/24 13:52

上で示した通り newdf <- df1[df1[,1]%in%hit,]で質問文に追記されたのと寸分違わない結果が出ます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問