在 R 中使用 plyr (ddply) 重新缩放
Rescaling with plyr (ddply) in R
我有这个 csv table,我需要在每列 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
到select缩放方向呢,根据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
我有这个 csv table,我需要在每列 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
到select缩放方向呢,根据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