通过R中的聚合计数因子观察

时间:2015-06-18 21:26:07

标签: r aggregate

我的载体是

 Name
  s1
  s1
  s1
  s2
  s2
  s3

我需要计算每个值的出现次数。预期的输出是这样的

 Names  No.
 s1      3
 s2      2
 s3      1

我正在使用聚合函数

aggregate(case2$Name,by=list(Names =case2$Name),table)

它给出了正确的结果,但是在我的预期输出中以诊断矩阵形式而不是另一个向量。

如果我尝试使用count计算聚合函数,就像这里一样

aggregate(case2$Name,by=list(Names =case2$Name),count)

它给了我这个错误

Error in UseMethod("group_by_") : 
no applicable method for 'group_by_' applied to an object of class "factor"

不确定我该怎么做?

3 个答案:

答案 0 :(得分:2)

同意table(Name)是最直接的方法,但作为参考,使用aggregate获得相同结果的正确语法是:

aggregate(Name, by=list(Name), length)

答案 1 :(得分:1)

使用简单的表格调用,例如

table(Name)

对于您的示例,您会找到类似......

的内容
> Name = as.factor( c ( 's1' , 's1' , 's1' , 's2' , 's2' , 's3' ) )
> Name
[1] s1 s1 s1 s2 s2 s3
Levels: s1 s2 s3
> table(Name)
Name
s1 s2 s3
 3  2  1


> t <- table(Name)
> str(t)
 'table' int [1:3(1d)] 3 2 1
 - attr(*, "dimnames")=List of 1
  ..$ Name: chr [1:3] "s1" "s2" "s3"
> t[1]
s1 
 3 
> t[2]
s2 
 2 
> t[3]
s3 
 1 
> t['s1']
s1 
 3 

> str(t['s1'])
 Named int 3
 - attr(*, "names")= chr "s1"

> sprintf( "abcd = %d" , t[1] )
[1] "abcd = 3"
> t[1] + 5
s1 
 8 

答案 2 :(得分:0)

@jxramos的解决方案完美无缺,但table格式有时会稍微不方便。存储在矩阵,数据帧或向量中的数据通常更容易处理。 如果你想要一个矩阵作为输出(在这种情况下有一列,所以它本质上是一个向量),你可以执行这样的小修改:

v1 <- c ('s1' , 's1' , 's1' , 's2' , 's2' , 's3' ) 
v2 <- as.matrix(table(v1))
colnames(v2) <- "Name"

这是输出:

> v2
   Name
s1    3
s2    2
s3    1