我有这样的样本向量:
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
然后以百分比表示相同的值。
这是一种方法:
## 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
如果我认为您的意思是正确的,请尝试:
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