将分组的连续变量转换为R中的行

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列转换为行.

Aru*_*run 4

一个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)

这应该会给你你所期望的。