从许多因素中挑选最常见的元素

时间:2016-11-17 18:48:35

标签: r

假设我有3个因素,每个因素有2个级别:'a'和'b':

> b <- factor(c('b', 'b', 'a'))
> a <- factor(c('a', 'b', 'a'))
> c <- factor(c('a', 'a', 'a'))

我想创建第四个因子,每个位置都包含这3个因子中最常见的元素,因此,在这个例子中,它看起来像这样:

> d
[1] a b a
Levels: a b

有没有办法用一些“平滑”功能执行这种操作,还是我必须使用“if”条件?

2 个答案:

答案 0 :(得分:2)

我们可以尝试

factor(apply(data.frame(b, a, c), 1, Mode), levels = levels(a))
#[1] a b a
#Levels: a b

其中Mode

Mode <- function(x) {
 ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

答案 1 :(得分:1)

这应该这样做。你不应该命名c,因为它代表了连接函数。

 bb <- factor(c('b', 'b', 'a'))
 aa <- factor(c('a', 'b', 'a'))
cc <- factor(c('a', 'a', 'a'))

dat <- data.frame(aa, bb, cc)

dd <- factor(apply(dat, 1, function(x) names(sort(table(x), decreasing = TRUE))[1]))

dd

[1] a b a
Levels: a b

> dat
  aa bb cc
1  a  b  a
2  b  b  a
3  a  a  a