我有一个看起来像这样的数据框:
x <- data.frame(sector=rep(1:5, each=2),
subspecies=rep(c("Type A", "Type B"), 5),
proportion= c(.2, 1-.2, .3, 1-.3, .4,
1-.4, .5, 1-.5, .6, 1-.6))
x$dominance <- NA
x[,1] <- sort(x[,1])
x
sector subspecies proportion dominance
1 1 Type A 0.2 NA
2 1 Type B 0.8 NA
3 2 Type A 0.3 NA
4 2 Type B 0.7 NA
5 3 Type A 0.4 NA
6 3 Type B 0.6 NA
7 4 Type A 0.5 NA
8 4 Type B 0.5 NA
9 5 Type A 0.6 NA
10 5 Type B 0.4 NA
在每个部门1-5中,如果类型A是最高比例,则需要在“显性”列中添加“优势”,或者如果类型B是最高比例,则需要将“ B优势”添加到“优势”列。如果有平局,我需要在“优势”列中添加“平局”。
这应该是输出数据帧:
x$dominance <- c("B dominant", "B dominant", "B dominant", "B dominant", "B dominant",
"B dominant", "tie", "tie", "A dominant", "A dominant")
x
sector subspecies proportion dominance
1 1 Type A 0.2 B dominant
2 1 Type B 0.8 B dominant
3 2 Type A 0.3 B dominant
4 2 Type B 0.7 B dominant
5 3 Type A 0.4 B dominant
6 3 Type B 0.6 B dominant
7 4 Type A 0.5 tie
8 4 Type B 0.5 tie
9 5 Type A 0.6 A dominant
10 5 Type B 0.4 A dominant
最佳答案
这是基本的R解决方案
compare <- function(x) {
## return subspecies of max proportion
res <- x[which(x$proportion == max(x$proportion)), "subspecies"]
if(length(res) > 1L) { ## if tied length(res) == 2
out <- "Tie"
} else { ## Simple string replacement
out <- paste(sub("Type ", "", res), "Dominant")
## or you could use
#out <- if(res == "Type A") {"A Dominant"} else {"B Dominant")}
}
out
}
x$dominance <- unsplit(lapply(split(x, x$sector), compare), x$sector)
> x
sector subspecies proportion dominance
1 1 Type A 0.2 B Dominant
2 1 Type B 0.8 B Dominant
3 2 Type A 0.3 B Dominant
4 2 Type B 0.7 B Dominant
5 3 Type A 0.4 B Dominant
6 3 Type B 0.6 B Dominant
7 4 Type A 0.5 Tie
8 4 Type B 0.5 Tie
9 5 Type A 0.6 A Dominant
10 5 Type B 0.4 A Dominant