我有一个名为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
有人可以为我解决这个问题。感谢
答案 0 :(得分:2)
使用melt
和table
:
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