これは、この質問のフォローアップ質問であり、最初はこの質問に触発されましたが、まったく同じではありません。
これが私の状況です。まず、データベースからデータを取得します。
df <- data.frame(id = c(1:6),
profession = c(1, 5, 4, NA, 0, 5))
df
# id profession
# 1 1
# 2 5
# 3 4
# 4 NA
# 5 0
# 6 5
第二に、私は職業コードに関する人間が読める情報を含むキーテーブルを引き出します。
profession.codes <- data.frame(profession.code = c(1,2,3,4,5),
profession.label = c('Optometrists',
'Accountants', 'Veterinarians',
'Financial analysts', 'Nurses'))
profession.codes
# profession.code profession.label
# 1 Optometrists
# 2 Accountants
# 3 Veterinarians
# 4 Financial analysts
# 5 Nurses
profession
さて、私は自分の変数をdf
からのラベルで上書きしたいと思いますprofession.codes
。できればパッケージから使用join
しplyr
ますが、私はどんな賢い解決策にもオープンです。私はそのプライが好きですが、xの順序を保持します。
私は現在このようにしています、
# install.packages('plyr', dependencies = TRUE)
library(plyr)
profession.codes$profession <- profession.codes$profession.code
df <- join(df, profession.codes, by="profession")
# levels(df$profession.label)
df$profession.label <- factor(df$profession.label,
levels = c(levels(df$profession.label),
setdiff(df$profession, df$profession.code)))
# levels(df$profession.label)
df$profession.label[df$profession==0 ] <- 0
df$profession.code <- NULL
df$profession <- NULL
names(df) <- c("id", "profession")
df
# id profession
# 1 Optometrists
# 2 Nurses
# 3 Financial analysts
# 4 <NA>
# 5 0
# 6 Nurses
これは、とprofession
を失うことなく上書きする方法です。NA
0
問題は、0が17または任意の数である可能性があることであり、何らかの方法でそれを説明したいと思います。さらに、可能であればコードも短くしたいと思います。
どんな助けでも大歓迎です。
ありがとう、エリック