5

これらの値がダミー値のデータフレームがあり、それらに対してlm回帰を実行したいと思います。変数の1つは、以下に示すようにグループ化された連続変数です。

df <- data.frame("y" = c(10, 11, 12, 13, 14),
                 "x" = as.factor(c("100-102", "103-105", "106-108", "109-111", "112-114")))

y〜xを回帰したいのですが、1つの方法は、x因子をそれらの平均数値に置き換えることです。これは、正規表現を使用して簡単に実行できます。

もう1つの方法は、追加の行を作成してデータセットを展開し、次のようにすることです。

data.frame("y" = c(10, 10, 10, 11, 11, 11......),
           "x" = c(100, 101, 102, 103, 104, 105......))

これを行う機能はありますか?

最初にx1、x2、x3などの追加の変数を作成し、次にreshape2パッケージを使用してx列を行に変換することを考えています。

4

2 に答える 2

4

data.table解決策。これは、大規模なものでも非常に高速である必要がありdata.frameます。

require(data.table)
dt <- data.table(df, key="y")
dt[, list(x=seq(sub("-.*$", "", x), sub(".*-", "", x))),by=y]

より多くの列があり、列で分割するときに各組み合わせが必要ない場合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]

これはあなたが期待するものを与えるはずです。

于 2013-02-09T23:20:25.887 に答える
2
require(stringr)
require(foreach)

foreach(i=1:nrow(df), .combine=rbind) %do% {
  s <- as.numeric(str_extract_all(df$x[i], "[0-9]+")[[1]])
  data.frame(y=rep(df$y[i], s[2]-s[1]+1), x=seq(s[1], s[2]))  
}

あなたdata.frameが本当に大きいなら、あなたは一緒に行くことができます%dopar%

于 2013-02-09T22:53:56.170 に答える