我有这个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 来实现这一目标?
(在这个例子中,B列应该是2.13为白色,1.88为深蓝色,2.07,2.09,2.05的色调相应缩放。另一列应保持不变。)
答案 0 :(得分:1)
您可以使用ifelse
语句根据组合范围缩放E.e
和F.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