我有一个包含要“展开”的因子的R数据框,因此对于每个因子级别,在包含1/0指示符的新数据框中有一个关联的列。例如,假设我有:
df.original <-data.frame(eggs = c("foo", "foo", "bar", "bar"), ham = c(1,2,3,4))
我想要:
df.desired <- data.frame(foo = c(1,1,0,0), bar=c(0,0,1,1), ham=c(1,2,3,4))
因为对于某些分析,你需要一个完全数值的数据框架(例如,主成分分析),我认为这个功能可能是内置的。编写一个函数来做这件事应该不会太难,但我可以预见到与列名相关的一些挑战,如果已经存在一些东西,我更愿意使用它。
发布于 2011-02-19 11:50:11
使用model.matrix
函数:
model.matrix( ~ Species - 1, data=iris )
发布于 2011-02-19 20:49:54
如果您的数据框仅由因子组成(或者您正在处理全部为因子的变量子集),则还可以使用ade4
包中的acm.disjonctif
函数:
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
与你描述的情况不完全一样,但它也是有用的……
发布于 2011-02-19 21:09:11
使用reshape2
包的一种快速方法:
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
请注意,这将精确地生成所需的列名。
https://stackoverflow.com/questions/5048638
复制相似问题