9

この質問はこの質問に関連していますが、まったく同じではありません。

このデータフレームがあるとします。

df <- data.frame(
                id = c(1:6),
                profession = c(1, 5, 4, NA, 0, 5))

職業コードに関する人間が読める情報を含む文字列。言う、

profession.code <- c(
                     Optometrists=1, Accountants=2, Veterinarians=3, 
                     `Financial analysts`=4,  Nurses=5)

df$professionここで、 の値を のテキストに置き換える最も簡単な方法を探してい ますprofession.code。コードを大幅に短縮しない限り、特別なライブラリを使用しないことが望ましいです。

最終結果を

df <- data.frame(
                id = c(1:6),
                profession = c("Optometrists", "Nurses", 
                "Financial analysts", NA, 0, "Nurses"))

どんな助けでも大歓迎です。

ありがとう、エリック

4

3 に答える 3

10

次の方法で実行できます。

df <- data.frame(id = c(1:6),
                 profession = c(1, 5, 4, NA, 0, 5))

profession.code <- c(`0` = 0, Optometrists=1, Accountants=2, Veterinarians=3, 
                     `Financial analysts`=4,  Nurses=5)

df$profession.str <- names(profession.code)[match(df$profession, profession.code)]
df
#   id profession     profession.str
# 1  1          1       Optometrists
# 2  2          5             Nurses
# 3  3          4 Financial analysts
# 4  4         NA               <NA>
# 5  5          0                  0
# 6  6          5             Nurses

これらのゼロを考慮して、ベクトルに0エントリを追加する必要があったことに注意してください。profession.code

編集: データには、対応する説明がない任意の数の職業コードが含まれる可能性があるという以下のエリックのコメントを説明するための更新されたソリューションがあります。

match.idx <- match(df$profession, profession.code)
df$profession.str <- ifelse(is.na(match.idx),
                            df$profession,
                            names(profession.code)[match.idx])
于 2012-04-03T23:02:31.957 に答える
3

私はそれをいじってみましたが、これがcarパッケージを使用した現在のソリューションです。

pLoop <- function(v) paste(profession.code[v],"='", names(profession.code[v]),"';") 
library(car)
df$profession<- recode(df$profession, paste(sapply(1:5, pLoop),collapse=""))

df
# id           profession
#  1         Optometrists 
#  2               Nurses 
#  3   Financial analysts 
#  4                 <NA>
#  5                    0
#  6               Nurses 

誰かが解決策について他の提案を持っているかどうかにまだ興味があります。Rのベース関数のみを使用して行うことをお勧めします。

于 2012-04-04T01:25:26.257 に答える
1

個人的にはarules、関数を使用してパッケージがこの問題に対処する方法が気に入っていdecodeます。ドキュメントから:

library(arules)
data("Adult")

## Example 1: Manual decoding
## get code
iLabels <- itemLabels(Adult)
head(iLabels)

## get undecoded list and decode in a second step
list <- LIST(Adult[1:5], decode = FALSE)
list

decode(list, itemLabels = iLabels)

利点は、パッケージが機能encodeとも提供することrecodeです。それぞれの目的は単純明快だと思います。

于 2014-02-19T11:36:30.977 に答える