2

変数 VAR を持つデータセット DATA があります。この変数モードは数値であり、そのクラスは因子です。性別を表しています。印刷すると下図のようになります

 VAR
  M
  M
  F
  U

  M

レベルを印刷すると、「」「F」「M」「U」が出力され、度数表は次のようになります。

     F     M     U
 2   30    25    1

私がやりたいのは、「F」または「M」以外のすべてを欠損値に変更し、それらに「男性」と「女性」のラベルを付け、変数の未使用のレベルを削除することです(ただし、欠損値のレベルはそのままにします) )。これまでのところ、以下のコードがあります。

DATA$VAR[DATA$VAR == "U" | DATA$VAR == ""] <- NA

しかし、レベルに対してまったく同じ値が得られたので、頻度表は次のようになります。

     F     M     U
 0   30    25    0

近づいたような気がしますが、そこまでではありません。レベルの問題を処理する方法がわかりません。どんな助けでも大歓迎です。

4

3 に答える 3

4

M と F を除くすべての要素が欠落している要素を作成するには、factorlevelsの呼び出し内で使用します。これらのラベルを変更するには、labels引数を使用します

a <-  factor(c("M","M","F","U","","M"))

a2 <- factor(a, levels = c('M','F'), labels =c('Male','Female'))

a2
# [1] Male   Male   Female <NA>   <NA>   Male  
# Levels: Male Female

で NA 値を集計する場合はtable、設定useNA = 'always'またはuseNA='ifany'

table(a2, useNA = 'ifany')
##   a2
##   Male Female   <NA> 
##     3      1      2 
于 2013-04-25T23:18:33.977 に答える
4

R には droplevels() 関数もあります。

a = factor(c("M","M","F","U","M"))

a.sub <- subset(a, a != "U")

droplevels(a.sub)
于 2013-04-25T23:01:56.867 に答える
2

因子レベルを上書きするだけでよいと思います。

a = factor(c("M","M","F","U","","M"))
table(a)
# a
#   F M U 
# 1 1 3 1 
levels(a)[!levels(a)%in%c("M","F")] <- NA
table(a)
# a
# F M 
# 1 3 

編集: 同様に、レベルのラベルを変更します:

levels(a)
# "F" "M"
levels(a) <- c("Female","Male")
于 2013-04-25T22:24:34.603 に答える