用R

时间:2015-05-26 19:15:42

标签: r plyr

我有这个csv表,我需要为每列重新调整0到1之间的数据。也就是说,任何给定列的最低值将为0,最高值为1,并且所有其他值将相应地线性缩放。这是我的剧本:

tableau  <- read.csv(text="Net,B,C,D,E (e),F (f)
a,1.88,0.15,0.6,10,90
b,2.05,0.23,0.51,55,80
c,2.09,0.29,0.4,58,88
d,2.07,0.52,0.36,80,84
e,2.13,0.3,0.27,7,90")
tableau.m <- melt(tableau)
tableau.m <- ddply(tableau.m, .(variable), transform,rescale = rescale(value))

问题是第1段并不完全正确:除了最后两列之外,重组应该按列完成:我需要根据最低值将“Ee”和“Ff”重新缩放到一起。两列,以及两列的最高值。也就是说,对于这些列而不是其他列,最低值应为7(显示为白色),最高值应为90(显示为深蓝色)。

因此,在F.f栏中,所有细胞都应显示为深蓝色。

是否可以通过 plyr 来实现这一目标?

enter image description here

(在这个例子中,B列应该是2.13为白色,1.88为深蓝色,2.07,2.09,2.05的色调相应缩放。另一列应保持不变。)

2 个答案:

答案 0 :(得分:1)

您可以使用ifelse语句根据组合范围缩放E.eF.f值,而不是每组值的范围:

tableau.m = ddply(tableau.m, .(variable), transform,
                  rescale = ifelse(variable %in% c("E.e","F.f"), 
                                   rescale(value,
                                           from=range(value[variable %in% c("E.e","F.f")])),
                                   rescale(value)))

更新:在看到您的评论后,我意识到我的原始代码不正确。我们已经plyr要求variable分组,因此它无法同时查看两个单独的variable值,以获得{{{1}的正确范围1}}。

此处更新的代码可从完整数据框中获取正确的范围。它有效,但它是通过&#34;外部&#34;普利尔分组功能的环境,对我来说似乎并不优雅(在某些情况下甚至可能会产生意想不到的后果)。

rescale

答案 1 :(得分:1)

我意识到你要求$(".tableOfContents a").on("click", function() { var content = $("#content").text(); // scrape content... }); var list = $(".tableOfContents").find('a'); for (j=0; j < list.length; j++) { list.get(j).click(); } 回答,但对于其他来看的人来说,这里有plyr个答案:

dplyr