R生成频率表

时间:2012-07-18 07:24:29

标签: r vector frequency

我有这样的样本矢量:

v <- c(1, 2, 1, 3, 2, 3, 3, 4, 1, 4)

我想得到的是频率表,它会告诉我数字的频率,然后是另一个数字。

输出:

  1 2 3 4
1 0 1 0 1
2 1 0 1 0
3 1 1 1 0
4 1 0 1 0

然后以百分比表示相同的值。

2 个答案:

答案 0 :(得分:5)

这是一种方式:

## Construct a data frame in which each row is a pair of consecutive characters.
df <- data.frame(a=head(v,-1), b=v[-1])
## tabulate frequencies of the ordered pairs
res <- xtabs(~a+b, df)
res
#    b
# a   1 2 3 4
#   1 0 1 1 1
#   2 1 0 1 0
#   3 0 1 1 1
#   4 1 0 0 0

res/sum(res)
#    b
# a           1         2         3         4
#   1 0.0000000 0.1111111 0.1111111 0.1111111
#   2 0.1111111 0.0000000 0.1111111 0.0000000
#   3 0.0000000 0.1111111 0.1111111 0.1111111
#   4 0.1111111 0.0000000 0.0000000 0.0000000

答案 1 :(得分:2)

如果我在想你的意思是否正确,请尝试:

xtabs(~v[-1]+v[1:(length(v)-1)])
     v[1:(length(v) - 1)]
v[-1] 1 2 3 4
    1 0 1 0 1
    2 1 0 1 0
    3 1 1 1 0
    4 1 0 1 0

这与您的预期输出不符,但我不确定您是如何达到此目的的。

对于百分比,请使用prop.table

prop.table(xtabs(~v[-1]+v[1:(length(v)-1)]))*100
     v[1:(length(v) - 1)]
v[-1]        1        2        3        4
    1  0.00000 11.11111  0.00000 11.11111
    2 11.11111  0.00000 11.11111  0.00000
    3 11.11111 11.11111 11.11111  0.00000
    4 11.11111  0.00000 11.11111  0.00000