私はデータフレームを持っており、係数の各レベルに対して連続変数var1
の分位数を持つデータフレームに新しい変数を作成しようとしています。strata
ファクタレベル別の数量R
# some data
set.seed(472)
dat <- data.frame(var1 = rnorm(50, 10, 3)^2,
strata = factor(sample(LETTERS[1:5], size = 50, replace = TRUE))
)
# function to get quantiles
qfun <- function(x, q = 5) {
quantile <- cut(x, breaks = quantile(x, probs = 0:q/q),
include.lowest = TRUE, labels = 1:q)
quantile
}
2つの方法を使用してみましたが、いずれも使用可能な結果が得られませんでした。まず、私はstrata
の各レベルにqfun
を適用するaggregate
を使用してみました:
qdat <- with(dat, aggregate(var1, list(strata), FUN = qfun))
これは因子レベルによって分位数を返すが、出力バックデータ・フレーム(例えば、中に強制することは困難であり、unlist
を使用して行ありません新しい変数値はデータフレームの正しい行で上書きされます)。
:
tmp1 <- with(dat, split(var1, strata))
tmp2 <- lapply(tmp1, qfun)
tmp3 <- unlist(tmp2)
dat$quintiles <- tmp3
再び、これは、各因子レベルについて正しく変位値を算出するが、明らかに、aggregate
と同様にそれらがデータに正しい順序ではありませんフレーム。これを確認するには、データフレームに分位数「ビン」を入れます。
# get quantile bins
qfun2 <- function(x, q = 5) {
quantile <- cut(x, breaks = quantile(x, probs = 0:q/q),
include.lowest = TRUE)
quantile
}
tmp11 <- with(dat, split(var1, strata))
tmp22 <- lapply(tmp11, qfun2)
tmp33 <- unlist(tmp22)
dat$quintiles2 <- tmp33
var1
の値の多くは、quantile2
のビンの外側にあります。私は何かシンプルなことを逃しているように感じる。どんな提案も大歓迎です。
(1) - !私はいつも '忘れますave'。 – ndoogan
@mnelのおかげでそんなに3種類の方法のために、私は、単純な何かが欠けされている必要があります知っていた
– Chris