在R中对行进行分组以计算频率

时间:2014-09-05 13:26:32

标签: r

我有一个名为df的数据框,其中有一个名为Car Type的列。

User   CarType
1      AUDI
2      BMW
3      AUDI
4      BMW
5      <NA>
6      CHEVROLET
7      <NA> 

我使用聚合来查找每种CarType的频率。

freq<-aggregate(df$CarType,by=list(df$CarType),function(c) length(c))

> freq
    Group.1 x
1      Audi 2
2       BMW 2
3 CHEVROLET 1

如何在与频率相同的数据帧中获得整列中的NA频率?要求的输出:

  > freq
            Group.1 x
        1      Audi 2
        2       BMW 2
        3 CHEVROLET 1
        4        NA 2

3 个答案:

答案 0 :(得分:6)

只需使用table及其useNA参数即可。比aggregate更有效率,也节省了大量的打字

as.data.frame(table(df$CarType, useNA = "ifany"))
##        Var1 Freq
## 1      AUDI    2
## 2       BMW    2
## 3 CHEVROLET    1
## 4      <NA>    2

答案 1 :(得分:0)

您可以尝试:

df2<-data.frame("NA",sum(is.na(df$CarType)))
colnames(df2)<-c("Group.1","x")
freq<-rbind(df2,freq)

答案 2 :(得分:0)

默认情况下,由于默认参数为exclude = NA,因子不会将NA视为某个级别。将其切换为exclude = NULL将为您提供所需的信息:

freq<-aggregate(factor(df$CarType, exclude = NULL),by=list(factor(df$CarType, exclude = NULL)),function(c) length(c))