如何在R中计算不同点之间的转换次数

3

我是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.

非常感谢能够帮助我的任何人。

2个回答

2
这可能可以办到:
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.

2
简洁易读!已为您点赞!+1 - ThomasIsCoding
@BenjaminChristoffersen 我不好意思。 - s_baldur
@Benjamin Christoffersen 很好。非常感谢! - Trung Luu
@TrungLuu 很高兴能够帮助您。如果这个回答解决了您的问题,请点击复选框接受答案。 - Benjamin Christoffersen
1
@Benjamin Christoffersen 我做到了。谢谢 :) - Trung Luu

2
也许你可以尝试像下面这样使用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

如果你希望结果以数据框的格式呈现,你可以对res应用stack函数,例如:
> 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

我明白了。非常感谢。 - Trung Luu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接