簡體   English   中英

通過R中的聚集體觀察計數因子

[英]Counting factor observation via aggregate in R

我的載體是

 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(Name)是最直接的方法,但作為參考,使用aggregate獲得相同結果的正確語法是:

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

使用一個簡單的表調用,類似

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 

@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM