cbind 用于多个 table() 函数

cbind for multiple table() functions

我正在尝试计算 data.frame 中多列的频率。

我在每一列上使用了 table 函数,并通过 cbind 将它们全部绑定,然后使用聚合函数通过我的标识符计算均值。 示例:

df1
V1       V2     V3
George   Mary   Mary  
George   Mary   Mary
George   Mary   George
Mary     Mary   George
Mary    George  George
Mary   
Frequency<- as.data.frame(cbind(table(df1$V1), table(df1$V2), table(df1$V3)))
row.names V1
George    3
Mary      3
          1
George    1
Mary      4
          1
George    3
Mary      2

我得到的结果(视觉上)是一个 2 列数据框,但是当我检查 Frequency 的维度时,我得到的结果暗示只有第二列存在。

当我尝试重命名列和 运行 聚合函数时给我带来麻烦,重命名时出现错误:

colnames(Frequency) <- c("Name", "Frequency")
Error in names(Frequency) <- c("Name", "Frequency") : 
  'names' attribute [2] must be the same length as the vector [1]

最终目的是 运行 聚合命令并按名称获取平均值:

Name.Mean<- aggregate(Frequency$Frequency, list(Frequency.Name), mean)

期望的输出:

Name   Mean
George Value
Mary   Value

希望这就是您要找的:

> df1
  V1     V2     V3
1 George George George
2   Mary   Mary  Alice
3 George George George
4   Mary   Mary  Alice
5   <NA> George George
6   <NA>   Mary  Alice
7   <NA>   <NA> George
8   <NA>   <NA>  Alice
> ll=unlist(lapply(df1,table))
> nn=names(ll)
> nn1=sapply(nn,function(x) substr(x,4,nchar(x)))
> mm=data.frame(ll)
> mm$names=nn1
> tapply(mm$ll,mm$names,mean)
> Mean=tapply(mm$ll,mm$names,mean)
> data.frame(Mean)
       Mean
Alice   4.0
George  3.0
Mary    2.5

使用 mtabulate(来自@user3169080 的 post 的数据)

library(qdapTools)
d1 <- mtabulate(df1)
is.na(d1) <- d1==0 
colMeans(d1, na.rm=TRUE)
# Alice George   Mary 
#  4.0    3.0    2.5