Как подсчитать количество переходов между разными точками в R

#r #transition #point

#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.
 

Большое спасибо всем, кто может мне помочь.

Ответ №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
 

Комментарии:

1. Я понял. Большое спасибо

Ответ №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.
 

Комментарии:

1. понятно и легко читается! Поддержал ваш ответ! 1

2. @BenjaminChristoffersen мой плохой.

3. @Benjamin Christoffersen Очень хорошо. Большое спасибо!

4. @TrungLuu рад помочь. Если это ответило на ваш вопрос, пожалуйста, установите флажок, чтобы принять ответ.

5. @Benjamin Christoffersen Я это сделал. Спасибо 🙂