我有一个以下面的方式布局的数据框:
Species Trait.p Trait.y Trait.z
a 20.1 7.2 14.1
b 20.4 8.3 15.2
b 19.2 6.8 13.9
我想对每个物种组合应用(Xa) - (Xb),其中X是特征值,字母是物种,Xa> Xb。 XB。我必须是这样的,每个物种组合的较大值必须首先计算,计算每个性状
这是一个多步骤的过程吗?
示例输出可以是
Combination Trait.p Trait.y Trait.z
a/b 0.3 1.1 1.1
答案 0 :(得分:0)
我认为你选择了最大的价值,但大卫提出了一个很好的观点。我怀疑这是最好的方法,但我认为它会给你你所追求的东西。注意我添加了一个c,因为我确定你的问题有点复杂,只有a和b:
dat <- read.table(text="Species Trait.p Trait.y Trait.z
a 20.1 7.2 14.1
b 20.4 8.3 15.2
b 19.2 6.8 13.9
c 14.2 3.8 11.9", header=T)
li <- lapply(split(dat, dat$Species), function(x) apply(x[, -1], 2, max))
com <- expand.grid(names(li), names(li))
inds <- com[com[, 1] != com[, 2], ]
inds <- t(apply(inds, 1, sort))
inds <- inds[!duplicated(inds), ]
ans <- lapply(1:nrow(inds), function(i) {
abs(li[[inds[i, 1]]]-li[[inds[i, 2]]])
})
cbind(Combination = paste(inds[, 1], inds[, 2], sep="/"),
as.data.frame(do.call(rbind, ans)))
这给了我们:
Combination Trait.p Trait.y Trait.z
1 a/b 0.3 1.1 1.1
2 a/c 5.9 3.4 2.2
3 b/c 6.2 4.5 3.3
很抱歉没有注释,但我正在上课。