假设我有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”条件?
答案 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