计算数据帧中元素的频率

时间:2014-02-04 23:18:46

标签: r

我有以下数据框

SelectVar

   b    c    e    f    g    h    j 
1 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2
2 Dxb2 Dxb2 Dxb2 Dxb2 Dxc2 Dxc2 Dxc2
3 Dxd2 Dxi2 tneg tpos Dxd2 Dxi2 tneg

申请点数时我得到了

count(SelectVar)

   b    c    e    f    g    h    j   freq
1 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2   1
2 Dxb2 Dxb2 Dxb2 Dxb2 Dxc2 Dxc2 Dxc2   1
3 Dxd2 Dxi2 tneg tpos Dxd2 Dxi2 tneg   1

申请时

计数(SelectVar == Dxa2)

     b     c     e     f     g     h     j     freq
1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE     1 

我无法弄清楚如何计算SelectVar中不同元素Dxa2,Dxb2 ...的频率

2 个答案:

答案 0 :(得分:7)

您可以将data.frame变为vector,然后使用table

df <- read.table(text = "   b    c    e    f    g    h    j 
1 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2 Dxa2
2 Dxb2 Dxb2 Dxb2 Dxb2 Dxc2 Dxc2 Dxc2
3 Dxd2 Dxi2 tneg tpos Dxd2 Dxi2 tneg", header = TRUE, row.names = 1)

table(unlist(df))
## Dxa2 Dxb2 Dxd2 Dxi2 tneg tpos Dxc2 
##    7    4    2    2    2    1    3 

您也可以将结果转换为data.frame

as.data.frame(table(unlist(df)))
##   Var1 Freq
## 1 Dxa2    7
## 2 Dxb2    4
## 3 Dxd2    2
## 4 Dxi2    2
## 5 tneg    2
## 6 tpos    1
## 7 Dxc2    3

答案 1 :(得分:3)

使用table(),特别好,如果它们是因素(您的数据似乎包含):

first <- c("a", "b", "c")
sec <- c("a", "b", "b")
third <- c("b","c","c")
myframe <- cbind(first, sec, third)
table(myframe)

myframe
a b c 
2 4 3

虽然如果你有数字列,你可能会得到巨大的,不可读的输出。