別の列の値に基づいてdataframe
の列に値をスケーリングしたいとします。例えば、ここでは簡単な例ですRデータフレーム内の他の列の値に基づいて列をスケーリングする効率的な方法
d<-data.frame(x=runif(5,0,10),y=sample(c(1,2),size=5,replace=TRUE))
は出力が得られます。
x y
1 1.0895865 2
2 0.8261554 2
3 5.3503761 2
4 3.3940759 1
5 6.2786637 1
私はyの値に基づいて、xの値をスケーリングしたいので、私がしたいことは持っていることです。
(x|y=1 - average(x's | y=1))/std.dev(x's|y=1)
y=2
のx
の値と同様に、dのx値をスケーリングされた値に置き換えます。
私がこれまでに行っていることは少し不格好です:その後、
d1<-subset(d,y==1)
d2<-subset(d,y==2)
d1$x<-(d1$x-mean(d1$x))/sd(d1$x)
d2$x<-(d2$x-mean(d2$x))/sd(d2$x)
と一つの大きなデータフレームにすべての結果を結合、私の実際のデータは、yの50の異なる値を持っているので、これは少し面倒です複数の(異なる)列に対してこれを実行したいと思います。
require(dplyr)
d %>%
group_by(y) %>%
mutate(x = (x - mean(x))/sd(x))
コードに 'set.seed()'を追加して再現可能にし、期待される出力を共有してください。 – mtoto
あなたは 'ave(d $ x、d $ y、FUN = function(x)(x-mean(x))/ sd(x))'を探しているかもしれません。 – nicola