w****u 发帖数: 16 | 1 有一个小问题,应该非常straightforward的文本变量recoding成数值变量, 不知哪里
搞错了,请帮着看一下。
character变量dat.new$Size_Calc有4个values,分布如下:
> table(dat.new$Size_Calc)
Extra Large Large Medium Small
15 22 59 36
我想把它rocode成一个numerical变量:
> dat.new$size_num[dat.new$Size_Calc == "Small"] <- 1
> dat.new$size_num[dat.new$Size_Calc == "Medium"] <- 2
> dat.new$size_num[dat.new$Size_Calc == "Large"] <- 3
> dat.new$size_num[dat.new$Size_Calc == "Extra Large"] <- 4
为什么生成的变量dat.new$size_num没有任何数值?同样问题的是基本dat.new$City_
Type的indicator变量生成不了(ifelse(dat.new$City_Type=="Airport", 1, 0)),
什么原因????
================== 数据及程序如下 ==================
R image file:
https://docs.google.com/file/d/0B1q4C7PBzbjIWGg3b3M4eV9kd2c/edit?usp=sharing
> ls()
[1] "dat" "dat.new" "temp"
> table(dat.new$Size_Calc)
Extra Large Large Medium Small
15 22 59 36
> dat.new$size_num[dat.new$Size_Calc == "Small"] <- 1
> dat.new$size_num[dat.new$Size_Calc == "Medium"] <- 2
> dat.new$size_num[dat.new$Size_Calc == "Large"] <- 3
> dat.new$size_num[dat.new$Size_Calc == "Extra Large"] <- 4
> table(dat.new$size_num)
character(0)
> dat.new$city_airport_ind <- ifelse(dat.new$City_Type=="Airport", 1, 0)
> table(dat.new$city_airport_ind)
0
132 |
D**u 发帖数: 288 | 2 我没有运行结果
你先试试
dat.new[dat.new$Size_Calc == "Small","size_num"] <- 1 |
k*******a 发帖数: 772 | 3 检查下那些字符里面有没有 leading space |
P*******a 发帖数: 25 | 4 出问题的原因是字符有空格:
> levels(dat.new$Size_Calc)
[1] " Extra Large " " Large " " Medium " " Small "
一个偷懒的方法是直接把 factor 变成数字:
> size_num <- as.numeric(dat.new$Size_Calc)
> size_num
[1] 4 4 4 4 4 4 4 3 3 4 3 4 3 4 4 4 3 4 4 4 4 3 4 4 4 3 3 2 2 4 2 4 3 3 3
3 3 1 3 3 4 2 2 2 2 3 4 3
[49] 4 3 3 2 3 4 3 2 1 4 3 3 1 3 3 3 3 2 3 1 2 4 2 2 3 2 3 3 3 3 3 3 1 3 3
3 2 2 3 3 3 1 1 3 1 2 1 4
[97] 2 4 1 3 4 4 3 1 3 2 4 3 3 3 3 3 2 3 3 4 1 4 3 2 3 3 3 4 3 1 1 1 3 4 2
3
此时1到4是由 Extra Large 到 Small;需要把顺序倒过来。
> size_num <- abs(size_num-5)
> size_num
[1] 1 1 1 1 1 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 1 1 2 2 3 3 1 3 1 2 2 2
2 2 4 2 2 1 3 3 3 3 2 1 2
[49] 1 2 2 3 2 1 2 3 4 1 2 2 4 2 2 2 2 3 2 4 3 1 3 3 2 3 2 2 2 2 2 2 4 2 2
2 3 3 2 2 2 4 4 2 4 3 4 1
[97] 3 1 4 2 1 1 2 4 2 3 1 2 2 2 2 2 3 2 2 1 4 1 2 3 2 2 2 1 2 4 4 4 2 1 3
2
> dat.new$size_num <- size_num |
w****u 发帖数: 16 | 5 果然是有leading space ... R trim function (gdata package) does the trick.
thanks....
【在 k*******a 的大作中提到】 : 检查下那些字符里面有没有 leading space
|