楼主: zl66983279
3422 22

[问答] r中如何让某一列根据不能值变成多列且其他值不变 [推广有奖]

  • 6关注
  • 1粉丝

博士生

20%

还不是VIP/贵宾

-

威望
0
论坛币
950 个
通用积分
88.5266
学术水平
3 点
热心指数
3 点
信用等级
1 点
经验
128364 点
帖子
161
精华
0
在线时间
290 小时
注册时间
2015-10-20
最后登录
2020-12-11

楼主
zl66983279 在职认证  发表于 2016-11-17 13:28:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
r中如何让某一列根据不能值变成多列且其他值不变,新生成的多列值用1和0表示(其实是用来做随机森林的)

举例:
x<- data.frame(type=c("a","a","b","b"),value_1=c(1,2,3,4),value_2=c(4,3,2,1))
x
  type value_1 value_2
1    a       1       4
2    a       2       3
3    b       3       2
4    b       4       1

变形后成为
y<-data.frame(a=c(1,1,0,0),b=c(0,0,1,1),value_1=c(1,2,3,4),value_2=c(4,3,2,1))
y
  a b value_1 value_2
1 1 0       1       4
2 1 0       2       3
3 0 1       3       2
4 0 1       4       1

有没有现成的函数或者包呢

二维码

扫码加我 拉你入群

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

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

关键词:随机森林 如何 森林

回帖推荐

felixzhao123 发表于9楼  查看完整内容

你的问题实际上就是使用哑变量(dummy variable)的问题,caret包中有专门解决这个问题的函数 下面的代码是一个小的例子,供参考

沙发
ntsean 发表于 2016-11-17 22:13:02
  1. cbind(model.matrix(~type -1, data = x), x)
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
qiu435 发表于 2016-11-18 10:09:40
x$a[x$type == "a"]<- "1"
x$a[x$type == "b"]<- "0"
x$b[x$type == "b"]<- "1"
x$b[x$type == "a"]<- "0"
是不是你要的结果?
楼主的type是不是相应变量? 随机森林可以直接用a,b这类的分类变量的
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

板凳
zl66983279 在职认证  发表于 2016-11-21 11:06:10
ntsean 发表于 2016-11-17 22:13
这个为啥我看帮助里的model.matrix(~ a + b, dd) 一直b1都是不显示的呢?难道只能显示跟a列数相同的b列?能否给解释一下。

报纸
zl66983279 在职认证  发表于 2016-11-21 11:10:16
qiu435 发表于 2016-11-18 10:09
x$a[x$type == "a"]
type是特征值,不是分类变量。我现在某个特征值可能有上千种分类,那就要改为上千列,你这种要写循环。我是指觉得R应该直接有清洗这类特征值的函数吧。

地板
qiu435 发表于 2016-11-21 12:46:59
zl66983279 发表于 2016-11-21 11:10
type是特征值,不是分类变量。我现在某个特征值可能有上千种分类,那就要改为上千列,你这种要写循环。我 ...
好像没有,写过循环也很方便的吧,。。

7
qiu435 发表于 2016-11-21 13:17:09
zl66983279 发表于 2016-11-21 11:10
type是特征值,不是分类变量。我现在某个特征值可能有上千种分类,那就要改为上千列,你这种要写循环。我 ...
reshape2包中的函数dcast可以将数据从长变宽,你看看行不行

8
zl66983279 在职认证  发表于 2016-11-21 13:57:18
qiu435 发表于 2016-11-21 13:17
reshape2包中的函数dcast可以将数据从长变宽,你看看行不行
那个我知道,但是不一样的。但还是谢谢了

9
felixzhao123 发表于 2016-11-25 14:28:33
你的问题实际上就是使用哑变量(dummy variable)的问题,caret包中有专门解决这个问题的函数
下面的代码是一个小的例子,供参考
  1. library(caret)
  2. sample_Data <- data.frame(
  3.   FactorA=rep(c("A","B","C","D"),10),
  4.   Value_1=rnorm(40),
  5.   Value_2=rnorm(40,mean=5,sd=2)
  6. )
  7. dummy <- dummyVars(~FactorA+Value_1+Value_2,data=sample_Data)
  8. predict(dummy,sample_Data)
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

10
zl66983279 在职认证  发表于 2016-11-25 17:38:34
felixzhao123 发表于 2016-11-25 14:28
你的问题实际上就是使用哑变量(dummy variable)的问题,caret包中有专门解决这个问题的函数
下面的代码是一 ...
赞,正是我需要的。又学习了!!!!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 23:56