問題:ifelse
ステートメントの数に制限があることを知るために、100個以上のifelse
ステートメントで巨大なコードを書いています.50を超えるとエラーがスローされます。とにかく、私がやろうとしていることをやるためのより効率的な方法があることを知っています。ifelseステートメントで制限を超過
目的:文字列のさまざまなバリエーション(以下の例を参照)を明確なカテゴリ(例:下記)にコード化する機能を記述しようとしています。私はstr_detect
を使用してT/Fを与え、応答に基づいて正しいカテゴリに変更します。どのように私は100以上ifelse
ステートメント(これ以上のカテゴリがある)なしでこれを行うことができます。
例:あなたは、名前のベクトルであなたのパターンを置くことができる
mydf <- data_frame(answer = sample(1:5, 10, replace = T),
location = c("at home", "home", "in a home",
"school", "my school", "School", "Work", "work",
"working", "work usually"))
loc_function <- function(x) {
home <- "home"
school <- "school"
work <- "work"
ifelse(str_detect(x, regex(home, ignore_case = T)), "At Home",
ifelse(str_detect(x, regex(school, ignore_case = T)), "At
School",
ifelse(str_detect(x, regex(work, ignore_case = T)), "At
Work", x)))
}
### Using function to clean up messy strings (and recode first column too) into clean categories
mycleandf <- mydf %>%
as_data_frame() %>%
mutate(answer = ifelse(answer >= 2, 1, 0)) %>%
mutate(location = loc_function(location)) %>%
select(answer, location)
mycleandf
# A tibble: 10 x 2
answer location
<dbl> <chr>
1 1 At Home
2 1 At Home
3 1 At Home
4 1 At School
5 1 At School
6 1 At School
7 1 At Work
8 0 At Work
9 1 At Work
10 0 At Work
をあなた自身が何かのほんの一握り以上のものを必要とする見つけたら* https://www.tutorialspoint.com/r/r_switch_statement.htm – Kai
* ifelse 100以上の文を使用して、あなたは考え始める必要がありますより良い方法を見つけることについて。あなたが2匹の一握りに達すると、あなたは何かが間違っていると思うようになるはずです。あなたが手押し車をいっぱい持っている点に達すると、あなたは完全に骨抜きにして助けを求める必要があることを**知っている**。 dumptruckレベルに達しました。 –
case_when文を使用するか、または関数をすべての単語にマッピングして大文字小文字にするために、purr:map()を使用するといいでしょうか? – petergensler