包含空字符串时的R表列顺序

时间:2010-06-17 15:41:14

标签: r

我有一系列包含空字符串

的值
  

水平(MYDATA $ phone_partner_products)     “”dont_know“”maybe_interesting“
    “not_interesting”“very_interesting”“very_not_interesting”

如果我制作频率表,我会得到这个 表(MYDATA $ phone_partner_products)

                            dont_know    maybe_interesting 
            3752                  226                 2907 
 not_interesting     very_interesting very_not_interesting 
            1404                 1653                 1065

如何以更有意义的方式重新排列列? 如何重命名空字符串“”级别?

提前多多谢谢你。

2 个答案:

答案 0 :(得分:4)

使用levels()重置要更改的因子级别:

> ff <- as.factor(sample(c("foo", "", "bar"),20,repl=TRUE))
> table(ff)
ff
    bar foo 
  6   8   6 
> levels(ff)
[1] ""    "bar" "foo"
> levels(ff)[1] <- "ooops"
> table(ff)
ff
ooops   bar   foo 
    6     8     6 
> 

答案 1 :(得分:2)

重要的是, 使用levels()重新排序级别levels()只允许您访问索引标签,重新排序标签不会调整级别的顺序。

> set.seed(20)
> x <- factor(sample(c("Men","Women"), 100, replace = T))
> table(x)
x
  Men Women 
   57    43 
> levels(x) <- c("Women","Men")
> table(x)
x
Women   Men 
   57    43 

你在这里所做的就是重命名关卡。在原始样本中,有57名男性,然后您将男性改名为“女性”。这并未改变级别的顺序。犯这个错误可能会破坏你所有的分析!

为此,请使用relevel()功能。默认情况下,它会将匹配字符参数的级别移动到第一级位置。你也可以传给它一个字符向量。

> set.seed(20)
> x <- factor(sample(c("Men","Women"), 100, replace = T))
> table(x)
x
  Men Women 
   57    43
> x <- relevel(x, "Women")
> table(x)
x 
Women   Men 
   43    57

这已经做了相应的事情并改变了关卡的顺序,而不仅仅是他们的名字。

还有一个reorder()函数,它会根据某个因子在某个其他连续变量上的值对该因子的级别进行适当的重新排序。

> table(x)
x
Women   Men 
   43    57 
> set.seed(20)
> value <- rnorm(100)
> tapply(value, x, mean)
     Women        Men 
 0.1679080 -0.1180567 
> x <- reorder(x, value, mean)
> table(x)
x
  Men Women 
   57    43