我有一个test
:
A B C
1 1 NA
2 NA NA
1 2 2
我想创建另一列,比如说test$D
,这是该行中出现次数最多的一个,不包括NA。我想要的df是:
A B C D
1 1 NA 1
2 NA NA 2
1 2 2 2
我一直在寻找类似于rowMeans
的函数,其中na.rm = T但是找不到适合这种情况的函数。非常感谢任何帮助
答案 0 :(得分:2)
使用table
,
apply(test, 1, function(i) as.numeric(names(sort(-table(i)))[1]))
#[1] 1 2 2
答案 1 :(得分:1)
我们可以将apply
与MARGIN = 1
一起使用来查找每行中的数字频率,并使用which.max
获取最大频率数
test$D <- apply(test, 1, FUN = function(x) {
x1 <- table(factor(x, levels = unique(x)))
as.numeric(names(x1)[which.max(x1)])})
test$D
#[1] 1 2 2