2017-09-15 2 views
4

dplyr::count()を1つのデータセット内の任意の変数セットで実行しようとしています。変数ごとに手動でcount()を実行すると、期待した結果が得られます。しかし、私がcount()をforループに入れて変数の変数ごとに自動的に実行しようとすると、エラーが発生します。問題は、forループ内で変数をcount()にどのように渡しているかのようです。私はcount()がその変数を引用符で囲まれていないことを知っています。何らかの理由でRは渡すものが変数であることを伝えられません。ループでdplyr :: countに変数を渡す

私はdata$var1quo(var1)enquo(var1)var1“var1”quo(data$var1)、およびenquo(data$var1)として変数を渡すだけでなく、!!でイテレータをunquotingを含め、この問題を解決するために多くのことを、試してみました。私もcount()のような引数をcount(x=data, var=i)のように指定しようとしましたが、これはcount()にデータの行の総数を各繰り返しの回数として返すことになりました。何が原因でエラーが発生しているか、どのように修正できるかについてのアイデアがあれば、私は非常に感謝しています。

lubridateに含まれるlakersデータセットに依存する最小限の再現可能な例を示します。

# This code requires some of the packages in tidyverse. 
library(dplyr) 
library(lubridate) 


# results = empty data frame for filling with info from the count() command 
results <- data.frame() 

# mydata = the source data 
myData <- lakers 

# myCols = list of the names of columns I want to count() 
myCols <- c("opponent", "game_type", "player", "period") 


# Loop to count() every column in myCols automatically and store the results in 
# one giant tibble of vars (var) and counts (n) 

for(i in myCols){ 
results <- bind_rows(results, count(x=myData, i)) 
} 

答えて

7

これは動作します:

myData[myCols] %>% tidyr::gather(var, value) %>% count(var, value) 

# A tibble: 407 x 3 
     var value  n 
     <chr> <chr> <int> 
1 game_type away 17153 
2 game_type home 17471 
3 opponent ATL 904 
4 opponent BOS 886 
5 opponent CHA 412 
6 opponent CHI 964 
7 opponent CLE 822 
8 opponent DAL 1333 
9 opponent DEN 1855 
10 opponent DET 845 
# ... with 397 more rows 

あなたはtibbledish的にmyColsを渡したい場合は、あなたがrlangパッケージをルックアップする必要があります。

+0

私はそのラインを実行しようとすると、うーん、私はエラー 「UseMethodでエラーが発生しました(」as.quoted「)を取得: – jozimck

+0

」 『機能 『as.quoted』のノー適用可能な方法は、クラスのオブジェクトに適用されます』 @ jozimckあなたがあなたの質問とこの答えのコードだけで新しいRセッションでそれを実行するなら、あなたはそれを見ていますか?それはバージョン管理の問題かもしれません。私はdplyr 0.4.3とR 3.3.3にいる – Frank

+1

ああ、それは上記のように動作します。私のワークスペースに何かが詰まっている必要があります。ご回答有難うございます! – jozimck

関連する問題