首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自动将R因子扩展为每个因子级别的1/0指标变量集合

自动将R因子扩展为每个因子级别的1/0指标变量集合
EN

Stack Overflow用户
提问于 2011-02-19 11:23:59
回答 8查看 56.1K关注 0票数 112

我有一个包含要“展开”的因子的R数据框,因此对于每个因子级别,在包含1/0指示符的新数据框中有一个关联的列。例如,假设我有:

代码语言:javascript
复制
df.original <-data.frame(eggs = c("foo", "foo", "bar", "bar"), ham = c(1,2,3,4))

我想要:

代码语言:javascript
复制
df.desired  <- data.frame(foo = c(1,1,0,0), bar=c(0,0,1,1), ham=c(1,2,3,4))

因为对于某些分析,你需要一个完全数值的数据框架(例如,主成分分析),我认为这个功能可能是内置的。编写一个函数来做这件事应该不会太难,但我可以预见到与列名相关的一些挑战,如果已经存在一些东西,我更愿意使用它。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-02-19 11:50:11

使用model.matrix函数:

代码语言:javascript
复制
model.matrix( ~ Species - 1, data=iris )
票数 136
EN

Stack Overflow用户

发布于 2011-02-19 20:49:54

如果您的数据框仅由因子组成(或者您正在处理全部为因子的变量子集),则还可以使用ade4包中的acm.disjonctif函数:

代码语言:javascript
复制
R> library(ade4)
R> df <-data.frame(eggs = c("foo", "foo", "bar", "bar"), ham = c("red","blue","green","red"))
R> acm.disjonctif(df)
  eggs.bar eggs.foo ham.blue ham.green ham.red
1        0        1        0         0       1
2        0        1        1         0       0
3        1        0        0         1       0
4        1        0        0         0       1

与你描述的情况不完全一样,但它也是有用的……

票数 17
EN

Stack Overflow用户

发布于 2011-02-19 21:09:11

使用reshape2包的一种快速方法:

代码语言:javascript
复制
require(reshape2)

> dcast(df.original, ham ~ eggs, length)

Using ham as value column: use value_var to override.
  ham bar foo
1   1   0   1
2   2   0   1
3   3   1   0
4   4   1   0

请注意,这将精确地生成所需的列名。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5048638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档