簡體   English   中英

在R中使用plyr(ddply)重新縮放

[英]Rescaling with plyr (ddply) in R

我有這個csv表,我需要為每列在0和1之間重新縮放數據。 也就是說,任何給定列的最小值將是0,最大值將是1,所有其他值將相應地線性縮放。 這是我的腳本:

tableau  <- read.csv("/tableau.csv")
tableau.m <- melt(tableau)
tableau.m <- ddply(tableau.m, .(variable), transform,rescale = rescale(value))

(這是數據: https : //dl.dropboxusercontent.com/u/73950/tableau.csv

問題是我需要將第二列(“ B”)反轉。 也就是說,僅對於此列而不是其他列,最小值應為1,最大值應為0。

plyr那樣靈活嗎,還是我應該嘗試其他方式實現這一目標?

在此處輸入圖片說明

(在此示例中,B列應以2.13表示白色,1.88表示深藍色,並相應地縮放2.07、2.09、2.05的陰影。另一列應保持不變。)

如何使用ifelse根據variable的值選擇縮放方向:

tableau.m = ddply(tableau.m, .(variable), transform,
                  rescale = ifelse(variable=="B", 
                                   rescale(value, to=c(1,0)), rescale(value)))

   Net variable value    rescale
1    a        B  1.88 1.00000000
2    b        B  2.05 0.32000000
3    c        B  2.09 0.16000000
4    d        B  2.07 0.24000000
5    e        B  2.13 0.00000000
6    a        C  0.15 0.00000000
7    b        C  0.23 0.21621622
8    c        C  0.29 0.37837838
9    d        C  0.52 1.00000000
10   e        C  0.30 0.40540541
11   a        D  0.60 1.00000000
12   b        D  0.51 0.72727273
13   c        D  0.40 0.39393939
14   d        D  0.36 0.27272727
15   e        D  0.27 0.00000000
16   a    E..e. 10.00 0.04109589
17   b    E..e. 55.00 0.65753425
18   c    E..e. 58.00 0.69863014
19   d    E..e. 80.00 1.00000000
20   e    E..e.  7.00 0.00000000
21   a    F..f. 90.00 1.00000000
22   b    F..f. 80.00 0.00000000
23   c    F..f. 88.00 0.80000000
24   d    F..f. 84.00 0.40000000
25   e    F..f. 90.00 1.00000000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM