2017-02-04 24 views
0

最大値のパーセンテージと同じ扱いの値を表す、Rでパーセンテージで値をリスケールするには、あなたの助けが必要です。リセール値をパーセントで表示R

例えば、私はこの入力

Value Level Treatment 
     5  1  A 
     7  2  A 
     10 4  A 
     14 1  B 
     20 2  B 
     18 4  B 
     30 1  C 
     30 2  C 
     28 4  C 

を持っている私は私が

df <- read.table(header = TRUE, text = ' 
Value Level Treatment 
     50  1  A 
     70  2  A 
     100 4  A 
     70  1  B 
     100 2  B 
     90  4  B 
     100 1  C 
     100 2  C 
     93.3 4  C 
') 

    tapply(df$Value, df$Treatment, max) 

で始めることができると思う。しかし、その後、私は見当がつかないこの出力

 Value Level Treatment 
     50  1  A 
     70  2  A 
     100 4  A 
     70  1  B 
     100 2  B 
     90  4  B 
     100 1  C 
     100 2  C 
     93.3 4  C 

が必要どうやって進める。

誰かが私を助けることがとても親切でしょうか? これは他の人にも役立つことを願っています。

ありがとうございます。

+0

からaveを使用することができます私がついてるかわからない。たとえば、最大値が4なので、最初の行のパーセントが「25」(1/4 * 100)ではなく「50」になるのはなぜですか? – Phil

+1

5は10の50%です(治療Aの最大値は4ではなく10です) –

+0

私が提供してくれた**ワンラインのソリューション**をうまく使います。 –

答えて

1

ご清聴ありがとうございます。その場合はdplyrで簡単にピーズです。

次データの使用:

value <- c(5, 7, 10, 14, 20, 18, 30, 30, 28) 
level <- c(1, 2, 4) 
treatment <- c("A", "A", "A", "B", "B", "B", "C", "C", "C") 

df <- data.frame(
    value, 
    level, 
    treatment, 
    stringsAsFactors = FALSE 
) 

ロードtidyverse/dplyr

library("tidyverse") 

グループ治療群によってをし、と順番にそれぞれに基づいて計算します。あなたはどちら

df <- df %>% 
    group_by(treatment) %>% 
    mutate(value = value/max(value) * 100) 

df 
## Source: local data frame [9 x 3] 
## Groups: treatment [3] 
## 
##  value level treatment 
##  <dbl> <dbl>  <chr> 
## 1 50.00000  1   A 
## 2 70.00000  2   A 
## 3 100.00000  4   A 
## 4 70.00000  1   B 
## 5 100.00000  2   B 
## 6 90.00000  4   B 
## 7 100.00000  1   C 
## 8 100.00000  2   C 
## 9 93.33333  4   C 

あなたが適切と考えるようにフォーマットすることができます。

+0

これは非常にうまくいく、たくさんありがとう。 –

0

改行を参照してください。以下に示すように

またplyrパッケージを使用することができます。

ddply(df,~Treatment,summarise,Value=Value/max(Value)*100,Level=Level) 
      Treatment  Value Level 
    1   A  50.00000  1 
    2   A  70.00000  2 
    3   A  100.0000  4 
    4   B  70.00000  1 
    5   B  100.0000  2 
    6   B  90.00000  4 
    7   C  100.0000  1 
    8   C  100.0000  2 
    9   C  93.33333  4 

後はdata.tableパッケージを使用して他の変異体である:

> dt <- data.table(df) 
> dt[,list(Value=Value/max(Value)*100,Level=Level),by=Treatment] 
      Treatment  Value Level 
    1   A  50.00000  1 
    2   A  70.00000  2 
    3   A  100.0000  4 
    4   B  70.00000  1 
    5   B  100.0000  2 
    6   B  90.00000  4 
    7   C  100.0000  1 
    8   C  100.0000  2 
    9   C  93.33333  4 
0

私たちは、私がbase R

df1$Value <- with(df1, round(100*Value/ave(Value, Treatment, FUN = max))) 
df1$Value 
#[1] 50 70 100 70 100 90 100 100 93 
関連する問題