カテゴリ変数を含むデータセットがあります。この変数の値に応じて、そのような値ごとに異なる関数を実行したいと思います。すべての可能な関数は同じ戻り型を持ちます。カテゴリが 'A'の場合はsin()、カテゴリが 'B'の場合はcos()、カテゴリが 'C'の場合はtan()を実行するとよいでしょう。dplyrで別の変数の値に応じて各項目に対して別の関数を実行
実際のアプリケーションは、結果がカテゴリの値に依存する集団をシミュレートすることですが、時には非常に異なる方法で行われます。
玩具例
library(dplyr)
category=c('A','B','C')
N <- 100
pop <- as.data.frame(ID <- seq(1:N))
pop <- as.tbl(pop)
pop$Category <- sample(category,N,replace=TRUE)
pop$score <- runif(N)
pop
tf <- function(x,EXPR) {
switch(EXPR,
A = cos(x),
B = sin(x),
C = tan(x)
)}
pop$results <- tf(pop$Score,pop$Category)
このコードは失敗し、合理的に十分な、エラーメッセージ
Error in switch(EXPR, A = cos(x), B = sin(x), C = tan(x)) : EXPR must be a length 1 vector
と私はdplyrで、慎重に、見てください、と私は簡単にどのように見ることができています各カテゴリごとに同じ機能を別々に実行します。しかし、私はカテゴリの値に依存する関数が必要です。
大変感謝しています。
は例が再現させるためのコードを編集してください動作します。 – ulfelder
私はその動きの秒です。 'ポップ'とは何ですか? – aichao
申し訳ありませんが、よく目に付きます - ポップは単なるデータフレームであり、テストを実行したときに自分の環境に存在していたはずです。 – astaines