我有一系列包含空字符串
的值水平(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
如何以更有意义的方式重新排列列? 如何重命名空字符串“”级别?
提前多多谢谢你。
答案 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