全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
6020 7
2019-12-02
比如,2017年的人口数据集pop
    year population sex      age
1   2017      36468  男    0-4岁
2   2017      34344  男    5-9岁
3   2017      32929  男  10-14岁
4   2017      32034  男  15-19岁
5   2017      38496  男  20-24岁
6   2017      51451  男  25-29岁
7   2017      44709  男  30-34岁
8   2017      41944  男  35-39岁
9   2017      44730  男  40-44岁
10  2017      53661  男  45-49岁
11  2017      48982  男  50-54岁
12  2017      30244  男  55-59岁
13  2017      34027  男  60-64岁
14  2017      25281  男  65-69岁
15  2017      15790  男  70-74岁
16  2017      10774  男  75-79岁
17  2017       6660  男  80-84岁
18  2017       2758  男  85-89岁
19  2017        660  男  90-94岁
20  2017        131  男 95岁以上


其中,age变量是字符型,我需要把它转成因子型(factor)


因为因子的类别非常多,所以图省事,我直接转换

>  pop$age <- as.factor(pop$age)

> pop$age  

[1] 0-4岁    5-9岁    10-14岁  15-19岁  20-24岁  25-29岁  30-34岁  35-39岁  40-44岁  45-49岁  50-54岁  55-59岁  [13] 60-64岁  65-69岁  70-74岁  75-79岁  80-84岁  85-89岁  90-94岁  95岁以上

20 Levels: 0-4岁 10-14岁 15-19岁 20-24岁 25-29岁 30-34岁 35-39岁 40-44岁 45-49岁 5-9岁 50-54岁 55-59岁 ... 95岁以上


这里碰到的问题是,5-9岁的level是不对的。

请问,有没有函数可以方便地调整factor型变量中某一个值的level?比如本例中的5-9岁的。






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-12-3 02:17:32
你这个实际上并不是只改变其中一个值的level吧,你这里现在5-9的是10,如果你把他变成2了,那相应后面的全部都要变的。
你可以试试这个方法。
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-12-3 12:30:22
levels(pop$age) <- levels(pop$age)[c(1, 10, 2:9, 11:length(levels(pop$age)))]
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-12-4 19:02:42
非常感谢。我解决这个问题的思路和你是一样的(如下)。
但是我处理的数据集其实包括多个年份。所以不能直接按你的方案来解决。


attach(pop)

先提取出age唯一值

age3 <- unique(age)

然后按原字符顺序转成因子变量

age4 <- factor(1:20, labels=age3)

最后,按age4的排序赋给数据集pop中的age变量

age <- factor(pop, levels=age4)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-12-4 19:03:41
cheetahfly 发表于 2019-12-3 12:30
levels(pop$age)
谢谢,这正是我需要的!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-12-4 19:14:26
owenqi 发表于 2019-12-3 02:17
你这个实际上并不是只改变其中一个值的level吧,你这里现在5-9的是10,如果你把他变成2了,那相应后面的全部 ...
非常感谢。我解决这个问题的思路和你是一样的(如下)。
但是我处理的数据集其实包括多个年份。所以不能直接按你的方案来解决。


attach(pop)

先提取出age唯一值

age3 <- unique(age)

然后按原字符顺序转成因子变量

age4 <- factor(1:20, labels=age3)

最后,按age4的排序赋给数据集pop中的age变量

age <- factor(age, levels=age4)

-------------------
我真受不了这个论坛的发帖编辑。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群