cbind用于多个table()函数

时间:2015-06-16 10:54:43

标签: r cbind

我正在尝试计算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

2 个答案:

答案 0 :(得分:1)

我希望这就是你要找的东西:

> 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

答案 1 :(得分:1)

使用mtabulate(来自@ user3169080&#39;的数据)

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