我有一個包含 1-60 個值的向量,它只能是三個值之一
例如:
x <- c("VAL1","VAL1","VAL1","VAL2","VAL2","VAL3","VAL3","VAL3","VAL3","VAL1")
我想通過洗掉基于前一個值的值來壓縮這個向量,即。如果 n = n 1 則洗掉 n 1,但如果 n != n 1 回傳 n 和 n 1
所需的輸出如下所示:
x <- c("VAL1","VAL2","VAL3","VAL1")
我認為需要使用 for 回圈,檢查 i 與 i 1 匹配的位置,但語法有問題
uj5u.com熱心網友回復:
我們可以使用rlefrombase R而不是使用for回圈
rle(x)$values
[1] "VAL1" "VAL2" "VAL3" "VAL1"
uj5u.com熱心網友回復:
您還可以使用索引
x[c(x[-1] != x[-length(x)], TRUE)]
[1] "VAL1" "VAL2" "VAL3" "VAL1"
uj5u.com熱心網友回復:
我認為最簡單的方法是使用(如@akrunrle所做的那樣),或使用@onyambu的滯后差異。
如果您想練習使用for回圈進行編碼,可以嘗試
res <- x[1]
for (i in 2:length(x)) {
if (x[i] != x[i - 1]) {
res <- append(res, x[i])
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/475975.html
