model.matrix 具有指定值
model.matrix with assigned values
假设我有以下 data.frame:
df=data.frame(cat=c("a","b","c"),y=c(1,2,3))
采用类别 (cat) 的 model.matrix
将它们转换为虚拟变量,如下所示:
model.matrix(~0+cat,df)
cata catb catc
1 1 0 0
2 0 1 0
3 0 0 1
attr(,"assign")
[1] 1 1 1
attr(,"contrasts")
attr(,"contrasts")$cat
[1] "contr.treatment"
但是,我希望为那些虚拟变量分配 df$y 中的值。我能想到的一种可能的解决方案是将行与 y 相乘。
不过,我猜是否有更好的专用函数?
所以基本上,将虚拟变量转换为给定向量的最有效方法是什么?
也许我们可以试试
library(reshape2)
acast(df, cat~y, value.var="y", fill=0)
# 1 2 3
#a 1 0 0
#b 0 2 0
#c 0 0 3
或使用model.matrix
model.matrix(~0 + cat, df) *df$y
假设我有以下 data.frame:
df=data.frame(cat=c("a","b","c"),y=c(1,2,3))
采用类别 (cat) 的 model.matrix
将它们转换为虚拟变量,如下所示:
model.matrix(~0+cat,df)
cata catb catc
1 1 0 0
2 0 1 0
3 0 0 1
attr(,"assign")
[1] 1 1 1
attr(,"contrasts")
attr(,"contrasts")$cat
[1] "contr.treatment"
但是,我希望为那些虚拟变量分配 df$y 中的值。我能想到的一种可能的解决方案是将行与 y 相乘。
不过,我猜是否有更好的专用函数?
所以基本上,将虚拟变量转换为给定向量的最有效方法是什么?
也许我们可以试试
library(reshape2)
acast(df, cat~y, value.var="y", fill=0)
# 1 2 3
#a 1 0 0
#b 0 2 0
#c 0 0 3
或使用model.matrix
model.matrix(~0 + cat, df) *df$y