通過基礎 R 中的執行來識別和分組

人們可能希望通過執行變數對資料進行分組並執行某種分析。請考慮以下簡單資料集:

(dat <- data.frame(x = c(1, 1, 2, 2, 2, 1), y = 1:6))
#   x y
# 1 1 1
# 2 1 2
# 3 2 3
# 4 2 4
# 5 2 5
# 6 1 6

變數 x 有三個執行:長度為 2 且值為 1 的執行,長度為 3 且值為 2 的執行,以及長度為 1 且值為 1 的執行。我們可能希望計算每個變數 y 的平均值。變數 x 的執行(這些平均值分別為 1.5,4 和 6)。

在基數 R 中,我們首先使用 rle 計算 x 變數的行程編碼:

(r <- rle(dat$x))
# Run Length Encoding
#   lengths: int [1:3] 2 3 1
#   values : num [1:3] 1 2 1

下一步是計算資料集每行的執行編號。我們知道執行總數是 length(r$lengths),每次執行的長度是 r$lengths,所以我們可以用 rep 計算每次執行的執行次數:

(run.id <- rep(seq_along(r$lengths), r$lengths))
# [1] 1 1 2 2 2 3

現在我們可以使用 tapply 通過對執行 id 進行分組來計算每次執行的平均 y 值:

data.frame(x=r$values, meanY=tapply(dat$y, run.id, mean))
#   x meanY
# 1 1   1.5
# 2 2   4.0
# 3 1   6.0