如何计算R中不同点之间的过渡次数
How to count the number of transition between different points in R
我是R的初学者
我有一个点向量,例如:
point <- c("A","B","B","C","C","A","A","C","B","A","B","A","A","C")
我想统计不同点之间的转换次数。这意味着我希望输出为:
Transit_A_B: 2;
Transit_A_C: 2;
Transit_B_C: 1;
Transit_B_A: 2;
Transit_C_B: 1;
Transit_C_A: 1.
非常感谢任何能帮助我的人。
这可能会:
p1 <- head(point, -1)
p2 <- point[-1]
keep <- p1 != p2
table(paste0("Transit_", p1[keep], "_", p2[keep]))
#R>
#R> Transit_A_B Transit_A_C Transit_B_A Transit_B_C Transit_C_A Transit_C_B
#R> 2 2 2 1 1 1
如果你想要像你这样的打印输出:
p1 <- head(point, -1)
p2 <- point[-1]
keep <- p1 != p2
out <- table(paste0("Transit_", p1[keep], "_", p2[keep]))
cat(paste0(names(out), ": ", out,
ifelse(seq_along(out) == length(out), ".", ";")),
sep = "\n")
#R> Transit_A_B: 2;
#R> Transit_A_C: 2;
#R> Transit_B_A: 2;
#R> Transit_B_C: 1;
#R> Transit_C_A: 1;
#R> Transit_C_B: 1.
也许你可以像下面那样尝试embed
df <- rev(data.frame(embed(point, 2)))
res <- table(
paste0(
"Transit_",
do.call(paste, c(subset(df, do.call("!=", df)), sep = "_"))
)
)
这给出了
> res
Transit_A_B Transit_A_C Transit_B_A Transit_B_C Transit_C_A Transit_C_B
2 2 2 1 1 1
如果您更喜欢数据框格式的结果,您可以应用 stack
而不是 res
,例如,
> stack(res)
values ind
1 2 Transit_A_B
2 2 Transit_A_C
3 2 Transit_B_A
4 1 Transit_B_C
5 1 Transit_C_A
6 1 Transit_C_B
我是R的初学者
我有一个点向量,例如:
point <- c("A","B","B","C","C","A","A","C","B","A","B","A","A","C")
我想统计不同点之间的转换次数。这意味着我希望输出为:
Transit_A_B: 2;
Transit_A_C: 2;
Transit_B_C: 1;
Transit_B_A: 2;
Transit_C_B: 1;
Transit_C_A: 1.
非常感谢任何能帮助我的人。
这可能会:
p1 <- head(point, -1)
p2 <- point[-1]
keep <- p1 != p2
table(paste0("Transit_", p1[keep], "_", p2[keep]))
#R>
#R> Transit_A_B Transit_A_C Transit_B_A Transit_B_C Transit_C_A Transit_C_B
#R> 2 2 2 1 1 1
如果你想要像你这样的打印输出:
p1 <- head(point, -1)
p2 <- point[-1]
keep <- p1 != p2
out <- table(paste0("Transit_", p1[keep], "_", p2[keep]))
cat(paste0(names(out), ": ", out,
ifelse(seq_along(out) == length(out), ".", ";")),
sep = "\n")
#R> Transit_A_B: 2;
#R> Transit_A_C: 2;
#R> Transit_B_A: 2;
#R> Transit_B_C: 1;
#R> Transit_C_A: 1;
#R> Transit_C_B: 1.
也许你可以像下面那样尝试embed
df <- rev(data.frame(embed(point, 2)))
res <- table(
paste0(
"Transit_",
do.call(paste, c(subset(df, do.call("!=", df)), sep = "_"))
)
)
这给出了
> res
Transit_A_B Transit_A_C Transit_B_A Transit_B_C Transit_C_A Transit_C_B
2 2 2 1 1 1
如果您更喜欢数据框格式的结果,您可以应用 stack
而不是 res
,例如,
> stack(res)
values ind
1 2 Transit_A_B
2 2 Transit_A_C
3 2 Transit_B_A
4 1 Transit_B_C
5 1 Transit_C_A
6 1 Transit_C_B