如何计算R

问题描述

我是 R 的初学者。

我有一个点向量,例如:

point <- c("A","B","C","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_",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