MyS*_*ddy 5 r linear-regression
我有一个数据框,这些值为虚拟值,我想对它们进行lm回归.其中一个变量是分组连续变量,如下所示
df <- data.frame("y" = c(10, 11, 12, 13, 14),
"x" = as.factor(c("100-102", "103-105", "106-108", "109-111", "112-114")))
Run Code Online (Sandbox Code Playgroud)
我想回归y~x,一种方法是用它们的平均数值替换x因子.这可以使用正则表达式轻松完成.
另一种方法是创建其他行并展开数据集,使其看起来像这样
data.frame("y" = c(10, 10, 10, 11, 11, 11......),
"x" = c(100, 101, 102, 103, 104, 105......))
Run Code Online (Sandbox Code Playgroud)
有没有这样做的功能?
我想首先创建其他变量,如x1,x2,x3,然后使用reshape2包将x列转换为行.
一个data.table办法。data.frame这在大型上也应该很快。
require(data.table)
dt <- data.table(df, key="y")
dt[, list(x=seq(sub("-.*$", "", x), sub(".*-", "", x))),by=y]
Run Code Online (Sandbox Code Playgroud)
如果您有更多列,并且您不希望按列拆分时每个组合x,那么这是要使用的代码:
require(data.table)
dt <- data.table(df)
# get all column names except "x"
key.cols <- setdiff(names(df), "x")
# set the data.table columns to key.cols
setkeyv(dt, key.cols)
dt.out <- dt[, list(x=seq(sub("-.*$", "", x), sub(".*-", "", x))), by = key.cols]
Run Code Online (Sandbox Code Playgroud)
这应该会给你你所期望的。