我有一个由40行和16列组成的R数据帧,所有因子。我想创建一个第17列,每行包含最重复的元素(因子)。我在stackexchange上比较了这里解释的方法,但据我所知,这些方法都没有回答我的问题。比方说,我有这个:
CAT1 CAT2 CAT3 ...
1 A B B
2 B B A
3 A A A
4 C C A
5 B C C
...
我想要一个看起来像这样的第四栏:
COLUMN
1 B
2 B
3 A
4 C
5 C
这应该不难,但我没有看到它。
答案 0 :(得分:3)
您可以使用table
:
DF <- read.table(text = " CAT1 CAT2 CAT3
1 A B B
2 B B A
3 A A A
4 C C A
5 B C C", header = TRUE)
find_most_frequent <- function(x) names(which.max(table(x)))
DF$COLUMN <- apply(DF, 1, find_most_frequent)
# CAT1 CAT2 CAT3 COLUMN
#1 A B B B
#2 B B A B
#3 A A A A
#4 C C A C
#5 B C C C
如果是tie,则返回排序后首先出现的值。有关字符排序的重要详细信息,请阅读help("Comparison")
。
答案 1 :(得分:1)
使用table
,
df$new <- apply(df, 1, function(i)names(sort(-table(i)))[1])
df
# CAT1 CAT2 CAT3 new
#1 A B B B
#2 B B A B
#3 A A A A
#4 C C A C
#5 B C C C
答案 2 :(得分:0)
以下是使用tabulate
函数的方法:
df$mostCommon <- apply(df, 1, function(i) {
i <- as.factor(i)
levels(i)[which.max(tabulate(i))]})
数据强>
df <- read.table(header=T, text="CAT1 CAT2 CAT3
A B B
B B A
A A A
C C A
B C C")
如果有关系,那么将选择第一个(A over B,B over C)。