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

通过R中的聚集观察计数因子,r,aggregate,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(ca

我的向量是

 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"

不确定我该怎么办?

使用一个简单的table调用,比如

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 
>Name=as.factor(c('s1','s1','s1','s2','s2','s3'))
>名字
[1] s1 s1 s2 s2 s3
级别:s1 s2 s3
>表(名称)
名称
s1 s2 s3
3  2  1
>t str(t)
“表”内[1:3(1d)]3 2 1
-属性(*,“dimnames”)=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'])
命名为int 3
-属性(*,“名称”)=chr“s1”
>sprintf(“abcd=%d”,t[1])
[1] “abcd=3”
>t[1]+5
s1
8.

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

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 
>Name=as.factor(c('s1','s1','s1','s2','s2','s3'))
>名字
[1] s1 s1 s2 s2 s3
级别:s1 s2 s3
>表(名称)
名称
s1 s2 s3
3  2  1
>t str(t)
“表”内[1:3(1d)]3 2 1
-属性(*,“dimnames”)=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'])
命名为int 3
-属性(*,“名称”)=chr“s1”
>sprintf(“abcd=%d”,t[1])
[1] “abcd=3”
>t[1]+5
s1
8.

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

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 
>Name=as.factor(c('s1','s1','s1','s2','s2','s3'))
>名字
[1] s1 s1 s2 s2 s3
级别:s1 s2 s3
>表(名称)
名称
s1 s2 s3
3  2  1
>t str(t)
“表”内[1:3(1d)]3 2 1
-属性(*,“dimnames”)=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'])
命名为int 3
-属性(*,“名称”)=chr“s1”
>sprintf(“abcd=%d”,t[1])
[1] “abcd=3”
>t[1]+5
s1
8.

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

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 
>Name=as.factor(c('s1','s1','s1','s2','s2','s3'))
>名字
[1] s1 s1 s2 s2 s3
级别:s1 s2 s3
>表(名称)
名称
s1 s2 s3
3  2  1
>t str(t)
“表”内[1:3(1d)]3 2 1
-属性(*,“dimnames”)=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'])
命名为int 3
-属性(*,“名称”)=chr“s1”
>sprintf(“abcd=%d”,t[1])
[1] “abcd=3”
>t[1]+5
s1
8.
同意
表(名称)
是最直接的方法,但作为参考,使用
聚合
获得相同结果的正确语法是:

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

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

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


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

由@jxramos提供的解决方案非常有效,但是
表格
格式有时会有点不方便。存储在矩阵、数据帧或向量中的数据通常比较容易处理。 如果您想要一个矩阵作为输出(本例中只有一列,因此它本质上是一个向量),您可以执行如下小修改:

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

@jxramos的解决方案工作得很好,但是
表格
格式有时会有点不方便。存储在矩阵、数据帧或向量中的数据通常比较容易处理。 如果您想要一个矩阵作为输出(本例中只有一列,因此它本质上是一个向量),您可以执行如下小修改:

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

@jxramos的解决方案工作得很好,但是
表格
格式有时会有点不方便。存储在矩阵、数据帧或向量中的数据通常比较容易处理。 如果您想要一个矩阵作为输出(本例中只有一列,因此它本质上是一个向量),您可以执行如下小修改:

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

@jxramos的解决方案工作得很好,但是
表格
格式有时会有点不方便。存储在矩阵、数据帧或向量中的数据通常比较容易处理。 如果您想要一个矩阵作为输出(本例中只有一列,因此它本质上是一个向量),您可以执行如下小修改:

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

谢谢,我以前从来不知道这也会计算向量中因子的长度。@user305590您甚至可以在一个表上做一个表,
table(table(Name))
,这是我以前做过的一些有趣的分层抽样策略,我想看看抽样有多均匀。谢谢,我以前从来不知道这也会计算向量中因子的长度。@user305590您甚至可以在表上做一个表,
table(table(Name))
,这是我以前做过的一些有趣的分层抽样策略,我想看看抽样有多均匀。谢谢,我以前从来不知道这也会计算向量中因子的长度。@user305590你甚至可以在一个表上做一个表,
table(table(Name))
,这是我以前做过的一些有趣的分层抽样策略,我想看看