R 벡터화의 이점을 활용하여보다 효율적인 방식으로 원하는 작업을 수행하는 방법을 이해하는 데 어려움이 있습니다.R 벡터화 기능 구현
간단히 말해 각 행에 대해 현재 행의 두 번째 열 ($ start)을 이전 및 다음 행의 $ start와 비교합니다 (모든 값은 정수입니다.이 값을 prev_dist 및 next_dist라고 부릅시다). 다음으로, 현재 행의 4 번째 열 ($ condition)과 그 이전의 $ 조건 또는 5 개의 다음 $ 조건을 인쇄합니다 (즉, 현재 행의 $ start에 가장 근접한 이전 또는 다음 행의 $ 시작).
weather 146 17 Rainy
weather 147 17 Rainy
weather 163 16 Sunny
weather 173 15 Sunny
weather 176 15 Rainy
weather 197 12 Rainy
나는 내 출력 (A dataframe에서)과 같이되고 싶어 : 나는 아래 함수를 작성하는 것을 시도했다
Rainy Rainy Sunny Sunny Sunny Rainy
Rainy Sunny Sunny Sunny Rainy Rainy
etc.
하지만,이 기능은 대형, 시뮬레이션 데이터 세트 영원히 실행됩니다.
누군가이 경우 벡터화를 구현하는 방법을 이해하는 데 도움이 될 수 있습니까?
buildMatrix <- function(input){
len <- nrow(input)-6
sequence_matrix <- data.frame()
for(line in 6:len){
start <- input[line,]$start
prev_start <- input[line-1,]$start
next_start <- input[line+1,]$start
prev_dist <- abs(start-prev_start)
next_dist <- abs(start-next_start)
current_seq <- input[line,]$condition
if(prev_dist < next_dist || prev_dist == next_dist){
for(i in 1:5){
prev_seq <- input[line-i,]$condition
current_seq <- c(current_seq, prev_seq)}
} else if(prev_dist > next_dist){
for(i in 1:5){
next_seq <- input[line+i,]$condition
current_seq <- c(current_seq, next_seq)}
}
sequence_matrix <- rbind(sequence_matrix, current_seq)
}
colnames(sequence_matrix) <- c("p0", "p1", "p2", "p3", "p4", "p5")
sequence_matrix
}
수정 된 코드 : 당신의 이점에
library(dplyr)
islessthan <- abs(df$V2-lead(df$V2)) < abs(df$V2-lag(df$V2))
ans <- lapply(seq_along(islessthan), function(i) if (is.na(islessthan[i])) {
NA
} else if(islessthan[i]==FALSE) {
c(df$V4[i], head(lag(df$V4, pmax(6-i, 0)), 5))
} else {
c(df$V4[i], head(lead(df$V4, i), 5))
})
대신'$ V2' 등 - 열에 유익한 이름을주지 않으시겠습니까? 그런 다음,'prev_start'와'next_start' (경우에 따라 마지막 또는 마지막 행에 'NA'가 채워짐)에 대한 새로운 열을 생성 할 수 있습니다. 이것은 한 줄짜리 루프가없는 문장으로 할 수 있습니다. 일단 그 단계에 도달하면 문제는 훨씬 쉬워 질 것입니다. –
이름 지정에 대해 포인트가 찍혔습니다. 위의 수정 된 코드와 같은 것을 의미 했습니까 (제 질문을 편집 했습니까?)? – kaka01
내가 염두에 두었던 것은'df $ prev_start <- c (NA, head (df $ start, -1))'와'df $ next_start <- c (tail (df $ start, -1), NA)',''dplyr'' 기반의 해결책이 더 바람직 할 것이다. –