-1

Rでこれを回避する方法である必要があります。ある種のマッピング関数ですか?基本的に、一連のgrepl条件と一連の置換を指定します。ありがとう、

hold[grepl('TRAVEL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "TRAVEL"
hold[grepl('IN-KIND:', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "IN-KIND"
hold[grepl('COMPLIANCE', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "COMPLIANCE"
hold[grepl('MEDIA', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "MEDIA"
hold[grepl('WATER|FOOD|OFFICE|Office|CLEANING|ALARM', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "OFFICE"
hold[grepl('DATA', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "DATA"
hold[grepl('LEGAL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "LEGAL"
hold[grepl('EVENT', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "EVENT"
hold[grepl('CATERING', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "CATERING"
hold[grepl('PHONE', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "PHONE"
hold[grepl('EQUIPMENT', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "EQUIPMENT"
hold[grepl('FUNDRAISING|FINANCE', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "FUNDRAISING"
hold[grepl('PAYROLL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "PAYROLL"
hold[grepl('LIST RENTAL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "LIST RENTAL"

編集:ええ、すみません、小さなフリッパント。holdは、「exp_pur_desc」という名前の1つの列を持つdata.frameです。「スイッチ」に相当するものを使用して、lapplyまたはsapplyが機能しているのを見ることができます。ありがとう。

4

2 に答える 2

1

これが1つの方法です:

strReplace <- function(x, mapFrom, mapTo) {
    for (i in seq_along(mapFrom)) {
        x <- gsub(mapFrom[[i]], mapTo[[i]], x)
    }
    x
}

strReplace(c("Hello cruel world!", "Hello again Tellus!"), # Text
           c("Hello", "world|Tellus"), # words to replace (regular expressions)
           c("Hi", "moon"))            # words to replace with
#[1] "Hi cruel moon!" "Hi again moon!"

...あなたの場合:

hold<-data.frame(ID=11:12, exp_pur_desc=c('FOOD','FINANCE'))
hold[['exp_pur_desc']] <- strReplace(hold[['exp_pur_desc']],
  c('WATER|FOOD|OFFICE|Office|CLEANING|ALARM', 'FUNDRAISING|FINANCE'),
  c('OFFICE', 'FUNDRAISING'))
hold
于 2012-04-11T21:25:45.970 に答える
0

これはパッケージを使用するオプションですgsubfn。これにより、任意の単語が「A」に置き換えられ、「A」のみに置き換えられます。「E」と同じであり、「I」、「O」、または「U」に置き換えられます。 「IOU」に置き換えられ、小文字の母音は置き換えに「other」を使用します(これは、要求されているように見える文字列全体を置き換えます。他の何かが必要な場合は変更できます)。

library(gsubfn)

replacements <- list(A='A', E='E', I='IOU', O='IOU', U='IOU', 'other')

gsubfn('^.*?(A|E|I|O|U|a|e|i|o|u).*$', replacements, state.name)
于 2012-04-12T19:14:49.493 に答える