У меня есть следующая матрица:
> a
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "F" "I" "I" "I" "M" "F" "I" "I" NULL NULL
[2,] "M" "M" "I" "I" "I" "I" "I" "M" "M" NULL
[3,] "M" "M" NULL "M" "F" "M" NULL "M" "M" "M"
[4,] "M" "F" "M" "M" "F" "F" "M" "M" "F" "F"
[5,] "M" "I" NULL "I" "I" "I" "I" "I" "I" "I"
[6,] "I" "I" "I" "I" "M" NULL "I" "I" "M" "M"
[7,] "I" "I" "I" "I" NULL "I" "F" "I" "I" "I"
[8,] "I" "I" NULL "I" "F" "I" "F" "I" "I" "I"
[9,] "M" "M" "M" "M" "F" "F" NULL "M" "F" "M"
[10,] NULL "F" NULL "F" "F" "F" "M" "F" "F" "F"
[11,] NULL "M" NULL "F" "F" "M" NULL "M" "F" "M"
[12,] "M" "M" "M" "M" "M" NULL "F" "M" "F" "M"
[13,] "I" NULL "M" "F" NULL "F" "M" NULL "M" "F"
...
Я хотел бы добавить столбец, который будет включать в себя наиболее распространенные символы (значения NULL можно игнорировать) в каждой строке (строке).Например, для строк 1 и 2 ответом является "I"
.Для строки 3 - "M"
и т. Д. Я пытался использовать
> max.col (a)
Error in max.col(a) : (list) object cannot be coerced to type 'double'
> str (a)
List of 8360
$ : chr "F"
$ : chr "M"
$ : chr "M"
$ : chr "M"
...
$ : chr "I"
$ : chr "F"
[list output truncated]
- attr(*, "dim")= int [1:2] 836 10
> class (a)
[1] "matrix"
Даже пробовал это:
g <- function(df)
{
X <- as.data.frame(t(apply( df, 1,
function(row)
{
u <- unique(row)
n <- rowSums(outer(u,row,"=="))
if (length(u)==1 )
{
c(row,u[which.max(n)],max(n),"",0)
}
else
{
c(row,u[which.max(n)],max(n),u[which.min(n)],min(n))
}
})))
colnames(X) <- c(colnames(df),"max_res","max_num","min_res","min_num")
return(X)
}
a<-data.frame(a)
g1<-g(a)
получил:
Error in FUN(X, Y, ...) : comparison of these types is not implemented
> dput(head(a, 10))
structure(list("F", "M", "M", "M", "M", "I", "I", "I", "M", NULL,
"I", "M", "M", "F", "I", "I", "I", "I", "M", "F", "I", "I",
NULL, "M", NULL, "I", "I", NULL, "M", NULL, "I", "I", "M",
"M", "I", "I", "I", "I", "M", "F", "M", "I", "F", "F", "I",
"M", NULL, "F", "F", "F", "F", "I", "M", "F", "I", NULL,
"I", "I", "F", "F", "I", "I", NULL, "M", "I", "I", "F", "F",
NULL, "M", "I", "M", "M", "M", "I", "I", "I", "I", "M", "F",
NULL, "M", "M", "F", "I", "M", "I", "I", "F", "F", NULL,
NULL, "M", "F", "I", "M", "I", "I", "M", "F"), .Dim = c(10L,
10L))
> dput (a)
structure(list("F", "M", "M", "M", "M", "I", "I", "I", "M", NULL,
NULL, "M", "I", "F", "I", "F", NULL, NULL, "F", "I", "F",
NULL, "F", "I", NULL, "F", "F", "F", "I", "M", "F", "F",
NULL, "I", NULL, "M", "M", "F", "F", "M", "F", "I", "I",
"M", "F", "M", "I", "I", "F", "I", "M", "F", "M", "M", "I",
"I", "M", "M", "M", "M", "M", "I", "F", "F", "F", "M", "I",
"I", "I", "I", "F", "I", "I", "I", "M", "I", NULL, "M", "M",
"M", "F", "F", "M", "M", "F", "F", NULL, NULL, "I", "M",
"I", "I", NULL, NULL, "F", NULL, NULL, "I", "F", "F", "F",
"I", "I", NULL, "M", "M", "I", "I", "I", "F", "M", "I", "F",
"M", "F", "M", NULL, "M", "F", "I", "M", "I", NULL, "I",
"M", "I", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
...
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL), .Dim = c(836L, 10L))