model.matrix 不适用于多行数据框
model.matrix doesn't work for dataframe with multiple rows
我有一个非常简单的数据框,我希望将其转换为矩阵。
df <- data.frame(age=c(50, 60), sex=factor(c('M', 'F')))
但是,当我尝试 运行 model.matrix
时失败了:
model.matrix(1 ~ age + sex, df)
Error in model.frame.default(object, data, xlev = xlev) :
variable lengths differ (found for 'age')
但是,如果我一次 运行 一行就没问题了。
model.matrix(1 ~ age + sex, df[1, ])
(Intercept) age sexM
1 1 50 1
attr(,"assign")
[1] 0 1 2
attr(,"contrasts")
attr(,"contrasts")$sex
[1] "contr.treatment"
我已经得到了我想要的东西,在行上使用 lapply
并 do.call('rbind', ...)
将它重新组合在一起,但我一定是遗漏了什么吧?
1
是您的问题,因为它的长度为 1。如果您不想指定响应,可以使用 model.matrix(~ age + sex, df)
。
我有一个非常简单的数据框,我希望将其转换为矩阵。
df <- data.frame(age=c(50, 60), sex=factor(c('M', 'F')))
但是,当我尝试 运行 model.matrix
时失败了:
model.matrix(1 ~ age + sex, df)
Error in model.frame.default(object, data, xlev = xlev) :
variable lengths differ (found for 'age')
但是,如果我一次 运行 一行就没问题了。
model.matrix(1 ~ age + sex, df[1, ])
(Intercept) age sexM
1 1 50 1
attr(,"assign")
[1] 0 1 2
attr(,"contrasts")
attr(,"contrasts")$sex
[1] "contr.treatment"
我已经得到了我想要的东西,在行上使用 lapply
并 do.call('rbind', ...)
将它重新组合在一起,但我一定是遗漏了什么吧?
1
是您的问题,因为它的长度为 1。如果您不想指定响应,可以使用 model.matrix(~ age + sex, df)
。