R Language
런 - 길이 인코딩
수색…
비고
런은 반복되는 값 또는 관측 시퀀스입니다. 반복되는 값의 경우, R의 "run-length encoding"은 실행 측면에서 벡터를 간결하게 설명합니다. 중히 여기다:
dat <- c(1, 2, 2, 2, 3, 1, 4, 4, 1, 1)
우리는 길이 1의 1 초를 갖는다; 그 다음 2 초의 길이 3 행; 그 다음 3 초의 길이 - 1 행; 등등. R의 런 길이 인코딩은 벡터의 모든 길이와 값을 캡처합니다.
확장 프로그램
실행은 표 형식의 데이터에서 연속적인 관측을 참조 할 수도 있습니다. R이를 인코딩하는 자연적인 방법을 가지고 있지 않지만, 그들은 함께 처리 할 수 rleid
data.table 패키지 (현재 막 다른 링크)에서 .
`rle '을 사용한 런 - 길이 인코딩
런 길이 인코딩은 벡터에서 연속 요소의 런 길이를 캡처합니다. 예제 벡터를 생각해보십시오.
dat <- c(1, 2, 2, 2, 3, 1, 4, 4, 1, 1)
rle
함수는 각 실행과 길이를 추출합니다.
r <- rle(dat)
r
# Run Length Encoding
# lengths: int [1:6] 1 3 1 1 2 2
# values : num [1:6] 1 2 3 1 4 1
각 실행에 대한 값은 r$values
캡처 r$values
.
r$values
# [1] 1 2 3 1 4 1
이것은 우리가 처음으로 1의 런을 본 다음 2의 런을 실행 한 다음 3을 실행 한 다음 1을 실행하는 것을 포착합니다.
각 실행의 길이는 r$lengths
로 캡처됩니다.
r$lengths
# [1] 1 3 1 1 2 2
1의 초기 실행은 길이 1이었고, 2의 실행은 길이 3이었습니다.
베이스 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 임).
base R에서, 우리는 먼저 rle
사용하여 x
변수의 run-length 인코딩을 계산할 것입니다.
(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
data.table에서 run으로 식별 및 그룹화
data.table 패키지는 데이터에서 런별로 그룹화하는 편리한 방법을 제공합니다. 다음 예제 데이터를 고려하십시오.
library(data.table)
(DT <- data.table(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 임).
data.table rleid
함수는 벡터의 각 요소의 실행 ID를 나타내는 ID를 제공합니다.
rleid(DT$x)
# [1] 1 1 2 2 2 3
그러면이 실행 ID를 쉽게 그룹화하고 y
데이터를 요약 할 수 있습니다.
DT[,mean(y),by=.(x, rleid(x))]
# x rleid V1
# 1: 1 1 1.5
# 2: 2 2 4.0
# 3: 1 3 6.0
벡터 압축 및 압축 해제를위한 런 길이 인코딩
동일한 값의 long run을 가진 긴 벡터는 run-length encoding (각 run의 값과 그 값이 반복되는 횟수)에 저장함으로써 상당히 압축 될 수 있습니다. 예를 들어, 1의 막대한 수와 0의 작은 수를 가진 길이가 1,000 만인 벡터를 생각해보십시오 :
set.seed(144)
dat <- sample(rep(0:1, c(1, 1e5)), 1e7, replace=TRUE)
table(dat)
# 0 1
# 103 9999897
1 천만 개의 항목을 저장하려면 상당한 공간이 필요하지만 대신이 벡터의 런 길이 인코딩을 사용하여 데이터 프레임을 만들 수 있습니다.
rle.df <- with(rle(dat), data.frame(values, lengths))
dim(rle.df)
# [1] 207 2
head(rle.df)
# values lengths
# 1 1 52818
# 2 0 1
# 3 1 219329
# 4 0 1
# 5 1 318306
# 6 0 1
런 - 랭스 인코딩에서 벡터의 처음 52,818 값은 1이고, 그 다음에는 단일 0, 219,329 연속 1, 0 등이있는 것을 볼 수 있습니다. run-length 인코딩에는 207 개의 항목 만 있으므로 1000 만 개의 값 대신 414 개의 값만 저장하면됩니다. rle.df
는 데이터 프레임이므로 write.csv
와 같은 표준 함수를 사용하여 저장할 수 있습니다.
런 - 렝쓰 인코딩에서 벡터를 압축하는 것은 두 가지 방법으로 수행 될 수있다. 첫 번째 방법은 rep
호출하여 첫 번째 인수로 run-length 인코딩의 values
요소를 전달하고 두 번째 인수로 run-length 인코딩의 lengths
요소를 전달하는 것입니다.
decompressed <- rep(rle.df$values, rle.df$lengths)
압축 해제 된 데이터가 원래 데이터와 동일하다는 것을 확인할 수 있습니다.
identical(decompressed, dat)
# [1] TRUE
두 번째 방법은 사용하는 것입니다 R의 내장 inverse.rle
온 기능 rle
예를 들어 객체 :
rle.obj <- rle(dat) # create a rle object here
class(rle.obj)
# [1] "rle"
dat.inv <- inverse.rle(rle.obj) # apply the inverse.rle on the rle object
우리는 이것이 정확히 원래의 dat
생성한다는 것을 다시 확인할 수 있습니다 :
identical(dat.inv, dat)
# [1] TRUE