次のデータフレームがあります。
varnames<-c("ID", "a.1", "b.1", "c.1", "a.2", "b.2", "c.2")
a <-matrix (c(1,2,3,4, 5, 6, 7), 2,7)
colnames (a)<-varnames
df<-as.data.frame (a)
ID a.1 b.1 c.1 a.2 b.2 c.2
1 1 3 5 7 2 4 6
2 2 4 6 1 3 5 7
「a.1」、「b.1」、および「c.1」の四分位数を使用して、「a.2」、「b.2」、および「c.2」列を分類したいと思います。
cat.a.2<-cut(df$a.2, c(-Inf, quantile(df$a.1), Inf))#categorizing a.2 using quartiles of a.1
cat.a.2
[1] (-Inf,3] (-Inf,3]
Levels: (-Inf,3] (3,3.25] (3.25,3.5] (3.5,3.75] (3.75,4] (4, Inf]
cat.b.2<-cut(df$b.2, c(-Inf, quantile(df$b.1), Inf))# categorizing b.2 using quartiles of b.1
cat.b.2
[1] (-Inf,5] (-Inf,5]
Levels: (-Inf,5] (5,5.25] (5.25,5.5] (5.5,5.75] (5.75,6] (6, Inf]
cat.c.2<-cut(df$c.2, c(-Inf, quantile(df$c.1), Inf))# categorizing c.2 using quartiles of c.1
cat.c.2
[1] (5.5,7] (5.5,7]
Levels: (-Inf,1] (1,2.5] (2.5,4] (4,5.5] (5.5,7] (7, Inf]
このタスクを自動的に行う方法はありますか?
私は単純にsapply()で実験しました:
quant.vars<-c("a.1","b.1", "c.1") # creating a vector of the names of variables which quartiles I am going to use
vars<-c("a.2","b.2", "c.2") # creating a vector of the names of variables which I am going to categorize
sapply (vars,FUN=function (x){cut (df [,x], quantile (df[,quant.vars], na.rm=T))})
a.2 b.2 c.2
[1,] "(1,3.25]" "(3.25,4.5]" "(5.75,7]"
[2,] "(1,3.25]" "(4.5,5.75]" "(5.75,7]"
もちろん、それは私が望んでいた結果ではありません。
さらに、カット () 範囲に「Inf」を追加すると、次のエラーが表示されます。
sapply (vars,FUN=関数 (x){cut (df [,x], c(分位数 (df[,quant.vars], Inf), na.rm=T))})
Error in quantile.default(df[, quant.vars], Inf) : 'probs' outside [0,1]
要約すると、私の質問は R の作成方法です。
接尾辞 1 (a.1.、b.1、c.1) を持つ変数の分位数を計算します
共通のプレフィックス (a.1 と a.2、b.1 と b.2、c.1 と c.2) を持つ変数のペアを認識します。
各ペアで、接尾辞 2 を持つ変数を分類するために、接尾辞 1 を持つ変数から取得された分位数を使用します (a.2 は a.1 分位数で分類され、b.2 は b.1 分位数で分類され、c.2 は c.2 で分類されます)。 1 分位数)
どうもありがとうございました