2

我有一个带有变量 VAR 的数据集 DATA。这个变量模式是数字的,它的类是一个因素。它代表性别。打印出来后,如下所示

 VAR
  M
  M
  F
  U

  M

当我打印出级别时,它输出:“”“F”“M”“U”,频率表如下所示:

     F     M     U
 2   30    25    1

我想要做的是将不是“F”或“M”的所有内容更改为缺失值,然后将它们标记为“Man”和“Woman”,并为变量删除未使用的级别(但仍然留下缺失的级别) . 到目前为止,我有以下代码:

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

但是我得到了完全相同的水平值,现在频率表如下所示:

     F     M     U
 0   30    25    0

我觉得我很接近,但并不完全在那里。我不明白如何处理水平问题。任何帮助是极大的赞赏。

4

3 回答 3

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 回答
4

要创建一个因子,其中除了 M 和 F 之外的所有内容都会levels在调用因子中丢失。要重新标记这些,请使用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 回答
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 回答