我想从数据框中计算每列的模式。我发现过类似的文章,内容涉及如何确定数据帧中行向量的模式(但大多数情况下都是使用数字数据)。
df <- data.frame(c("A","B","C","C"), c("A","A","B","C"),c("A","B","B","C"))
colnames(df) <- c("V1","V2","V3")
rownames(df) <- c(1,2,3,4)
df
我正在使用以下功能:
modefunc <- function(x){
tabresult <- tabulate(x)
themode <- which(tabresult == max(tabresult))
if(sum(tabresult == max(tabresult))>1) themode <- NA
return(themode)
}
mode.vector <- apply(df, 1, modefunc)
由于我的数据框不是数字的,因此很不幸出现以下错误:
Error in tabulate(x) : 'bin' must be numeric or a factor
任何与此有关的帮助都会有所帮助。预先感谢。
答案 0 :(得分:0)
我对您的功能做了些改动。
modefunc <- function(x){
x<-c(as.character(x) ,use.names = F, recursive = TRUE )
tabresult <- table(x)
mod<-sort(table(x),decreasing = T)[1]
mod_name<-names(mod)
if(sum(tabresult == mod)>1) themode <- NA
return(mod_name)
}
mode.vector <- apply(df, 1, modefunc)
1 2 3 4
"A" "B" "B" "C"