4

私はコードブックが付属しているRのデータセットを使用しています。このデータセットは、基本的に、因子変数のさまざまなレベルのラベルがどうあるべきかを教えてくれます。たとえば、コードブックでは、「Sex」変数で、0が「女性」で、1が「男性」であることがわかります。この情報を使用して、それに応じて変数の値にラベルを付けています。

しかし、私は最近、コードブックが完全ではないことに気づきました。たとえば、1つの変数について、1が「はい」、2が「いいえ」であることがわかりますが、データで確認できる7、8、および9が何であるかはわかりません。私がやりたいのは、この変数に次のようにラベルを付けることです(またはこのようなもの):

data$variable <- factor(data$variable,
                        levels=c(1, 2, 7, 8, 9),
                        labels=c("Yes", "No", "7", "8", "9"))

基本的に、コードブックで指定されていないすべてのレベルに、それ自体のラベルを付けたいと思います。私が抱えている問題は、このコードブックにこれらのかなりの数が欠落していることです。実際には、データ内の未定義の値をすべて手動で調べて、上記の変数のコードを作成する必要はありません。さらに、これらの欠落しているレベルを除外すると、Rは自動的にそれらに「NA」というラベルを付けます。これは不要です。

概要:factor()を使用して、指定されていないすべてのレベルを「NA」としてラベル付けする代わりに、それらを自分自身としてラ​​ベル付けする方法を理解しようとしています。

4

1 に答える 1

5

ファクターを作成した後でレベルを変換できるので、それを有利に使用できます。

mydat <- c(1, 2, 3,2,3,4,3,2,1,2,4,4,6,5,7,8,9)
# convert to factor ignoring code book
dat <- factor(mydat)
# Create map corresponding to codebook levels
mymap <- c("1" = "Yes", "2" = "No")
# Figure out which levels are accounted for by codebook
id <- levels(dat) %in% names(mymap)
# Convert to appropriate values
levels(dat)[id] <- mymap[levels(dat)[id]]

あるいは(そしておそらく少し簡単に)

# alternatively we can construct the map if we have two vectors
# of the value and the codebook value
val <- c(1, 2)
lev <- c("Yes", "No")

dat <- factor(mydat)
levels(dat)[val] <- lev
于 2012-10-14T18:48:50.757 に答える