在多个列中使用count()并订购结果

时间:2017-03-12 18:31:19

标签: r dataframe count na

我有一个名为table的数据框,就像这样

      a  m  g     c1     c2     c3      c4 
1  2015  5 13  bread   wine   <NA>    <NA>    
2  2015  8 30   wine   eggs   rice    cake 
3  2015  1 21   wine   rice   eggs    <NA>       
...

我想计算c1到c4列中的元素并对它们进行排序 我试着用:

library(plyr)
c<-count(table,"c1")

但我不知道如何计算多个专栏。

然后我想使用arrange(c,desc(freq))对它们进行排序,但是当我尝试使用一列时,值NA始终位于顶部,而我只想要前3个元素。喜欢这个

     c  freq
1 wine     3
2 eggs     2
3 rice     2

有人可以为我解决这个问题。感谢

2 个答案:

答案 0 :(得分:2)

使用melttable

df1 <- read.table(text="a  m  g     c1     c2     c3      c4
2015  5 13  bread   wine   NA    NA
2015  8 30   wine   eggs   rice    cake
2015  1 21   wine   rice   eggs    NA", header=TRUE, stringsAsFactors=FALSE)

c_col <- melt(as.matrix(df1[,4:7]))
sort(table(c_col$value),decreasing=TRUE)

 wine  eggs  rice bread  cake 
    3     2     2     1     1 

答案 1 :(得分:1)

使用qdaptools,提供示例数据框(名称为table):

library(qdapTools)
counts <- data.frame(count=sort(colSums(mtabulate(table[,4:7])), decreasing=TRUE)) 
subset(counts,rownames(counts)!='<NA>')[1:3,1,drop=FALSE] #remove <NA>, select top 3 elements

#      count
# wine     3
# eggs     2
# rice     2