2016-12-06 8 views
1

だから、この質問をどのようにフレーズするかわかりませんが、かなり基本的です。私はもちろん、これをdplyr - esqueパイプに含めるためのエレガントな方法を探したいと思うでしょう。グループ内のスケール変数定数

代わりに、0.3と0.5のつまり、私は

> as.numeric(scale(c(0.3, 0.5))) 
[1] -0.7071068 0.7071068 

持っていると思い、私はスケーリングされたバージョンでdを交換したいのは、私は、データフレーム

set.seed(1) 
dd <- data.frame(id = rep(c(1,2), c(3,5)), 
       x = rnorm(8), 
       d = rep(c(0.3, 0.5), c(3,5))) 

を持っているとしましょうパイプにscaleを使用した場合の問題は、大きなグループ(id = 2)がより多くの重みを受け取り、得られた値が

> dd %>% 
+ mutate(scale_d = scale(d)) 
    id   x d scale_d 
1 1 -0.6264538 0.3 -1.2076147 
2 1 0.1836433 0.3 -1.2076147 
3 1 -0.8356286 0.3 -1.2076147 
4 2 1.5952808 0.5 0.7245688 
5 2 0.3295078 0.5 0.7245688 
6 2 -0.8204684 0.5 0.7245688 
7 2 0.4874291 0.5 0.7245688 
8 2 0.7383247 0.5 0.7245688 

私はこれが非常に単純な問題であるべきだと思っています。だから、単純な解決法があるかもしれません。

+0

? – G5W

答えて

2

あなたがすることができ、一時的にnest X: `DDの$ dを=規模(DD $ d)は`についてどのように

library(tidyverse) 

dd %>% 
    nest(x) %>% 
    mutate(scale_d = scale(d)) %>% 
    unnest() 

## # A tibble: 8 × 4 
##  id  d scale_d   x 
## <dbl> <dbl>  <dbl>  <dbl> 
## 1  1 0.3 -0.7071068 -0.6264538 
## 2  1 0.3 -0.7071068 0.1836433 
## 3  1 0.3 -0.7071068 -0.8356286 
## 4  2 0.5 0.7071068 1.5952808 
## 5  2 0.5 0.7071068 0.3295078 
## 6  2 0.5 0.7071068 -0.8204684 
## 7  2 0.5 0.7071068 0.4874291 
## 8  2 0.5 0.7071068 0.7383247 
関連する問題