2017-08-09 17 views
0

別のデータフレームの3つの列にデータフレームの要素が何回あるかをカウントするコードを記述しようとしています。私は適用ループを使用する必要があるが、それを書く方法はわからないことは分かっている。Countif:1つのデータフレームの要素が別のデータフレームに何回あるか

例:私はデータである回数例えば、 "DF" のエントリOR知りたい

DF

state 
1  OR 
2  TX 
3  MI 
4  MA 
5  IA 
6  CA 

データ

ST ST2 ST3 
OR  
     MI 
     SC 
     TN 
TX  
     KY 
     OH 
     MN 
MI  
     IA 
     NC 
     MA 
     MI 
MA  
     KY 
     MI 
IA  
     IA 
    MO 
CA  
     TN 
    PA 
     KY 
IL  

、TXデータであります、など。以下のコードは動作しません。私は「statteUnlistと呼ばれるベクトルとしてデータを非公開」と私はちょうど==例えばテストする場合、それは動作します 『OR』以下のコードではなく、私はDFのすべてのエントリを通過するループを適用する必要があります。

length(which(stateUnlist == df$state)) 

コードの上I DFのすべてのエントリをループするにはどうすればよい。動作しますが、コードの下にいないのですか?

length(which(stateUnlist == "OR")) 

state n 
1  OR 2 
2  TX 2 
3  MI 8 
4  MA 4 
5  IA 6 
6  CA 2 
7  IL 8 
8  MO 2 
9  PA 2 
10 SC 2 
11 TN 4 
12 KY 6 
13 OH 2 
14 MN 2 
15 NC 2 
+0

投稿された例から望ましい結果を示してください。 – Parfait

+0

バージョン3.3.2のライブラリは(XL Connect) –

+0

です。これは私のリクエストに対する回答ですか? – Parfait

答えて

2
(FYIこれらはとても総Excelからの総データで異なります)以下の望ましい結果を

あなたは数を得ることができますその後

library(magrittr) 
library(dplyr) 

data1 <- data.frame(table(unlist(data))) %>% 
      setNames(c("state","n")) 

あなたの答えを得るための別の方法は、以下のコードで「選択」であなたの列を指定することですdf

data2 <- left_join(df, data1, by="state") 
+0

おかげでChi。一意の状態名を持つ私のdfがデータベクトルの全長の要素でなければならないので、いくつかのテストをした後、分割とサプリの機能を使用できないことに気付きました。私はテストし、それを複数にして同じ回答を得ました。あなたのコードは将来的に役立ちます。私はこの警告を受けました: '警告メッセージ: left_join_impl(x、y、$ x、$ y、接尾辞$ x、接尾辞$ y): さまざまなレベルの要素を結合し、文字ベクトルに強制する ' –

+0

ohあなたが近くに '%>%'を実行するための別のパッケージがあります。 'magrittr、dplyr'パッケージが必要です –

+0

ライブラリについて私に思い出させてくれてありがとう。私は私の答えを更新しました。 – CPak

-1

のものをフィルタリングしてdata。私の例の最初のdfは、私が2番目の 'データ'データフレームにあるユニークな値の新しいデータフレームであることを示すのを忘れていました。あなたが2つのデータフレームを与えているなら、Chiの答えはまだ正しいです。

data %>% 
select(ST:ST3) %>% 
gather(key, value, na.rm = TRUE) %>% 
count(value) 

また、以下のコードを使用してデータフレーム全体を参照することもできます。 'State'は、収集した後の列の名前の一例に過ぎず、値はすべての列の収集された値の既定の列2です。カラム名を重複させるので、カラムに 'value'という名前を付けたくありません。

count((gather(data, State, na.rm = TRUE)), value) 
関連する問題