2013-10-02 2 views
0

이것이 어려운 질문이라고 생각하지 않지만이 문제를 해결할 수 없으며 스택에서 아무 것도 찾을 수 없습니다. 중복되지 않음). 중첩 된 for 루프를 if/else를 사용하여 lapply 문으로 변경하려고합니다. 데이터 프레임 목록이 있지만 중첩 된 for 루프처럼 행에 액세스하는 방법을 찾지 못했습니다. 나는 bearingDelta 열을 사용하여 bearingDelta 열의 값이 119.9보다 큰지 아닌지에 따라 1 또는 0으로 새 목록을 채 웁니다. 또한이 질문은 내가 최근에 게시 한 질문과 비슷하게 보일 수도 있지만 실현 하기엔 충분하다고 생각합니다.if/else 문이 lapply를 사용하여 데이터 프레임 목록의 행을 반복 반복하는 경우 R

데이터 :

lat <- c(32.87707, 32.87708, 32.87694, 32.87726, 32.87469) 
lon <- c(-117.2386, -117.2334, -117.2378, -117.2356, -117.2329) 
bearingDelta <- c(180, 49, 23, 119, 129) 
df <- data.frame(cbind(bearingDelta, lat, lon)) 
df.list <- list(df, df, df, df) 

중첩 루프 :

lapply
over120 <- list() 
for (i in 1:length(tripList)) { 
    for (j in 1:nrow(tripList[[i]])) { 
if (tripList[[i]][j, c("bearingDelta")] <= 119.9) { 
    over120[[i]][j] <- 0 } 
else { 
    over120[[i]][j] <- 1 } 
    } 
} 

(이런 걸 내가 얻을 위해 노력하고있어입니다).

over120 <- lapply(tripList, if (tripList[[i]][j, c("bearingDelta")] <= 119.9)  over120[[i]][j] <- 0 
    else over120[[i]][j] <- 1) 

이 샘플 데이터 세트에 대한 원하는 출력은 다음과 같이 보일 것이다 :

> over120 
[[1]] 
[1] 1 0 0 0 1 

[[2]] 
[1] 1 0 0 0 1 

[[3]] 
[1] 1 0 0 0 1 

[[4]] 
[1] 1 0 0 0 1 

답변

3

if 필요 없음 :

lapply(df.list, function(x) as.integer(x$bearingDelta >= 119.9)) 
# [[1]] 
# [1] 1 0 0 0 1 
# 
# [[2]] 
# [1] 1 0 0 0 1 
# 
# [[3]] 
# [1] 1 0 0 0 1 
# 
# [[4]] 
# [1] 1 0 0 0 1 
+1

일 -와도'lapply (df.list, as.integer (bearingDelta> = 119.9))' – flodel

+0

@flodel 그런 식으로'with'를 사용하지 않았습니다. 유용 할 것입니다. 감사합니다. – alexwhan

+0

대단히 고마워요! – Misc