2013-10-02 20 views
0

Je ne pense pas que ce soit une question difficile, mais je ne peux tout simplement pas comprendre cela et je n'ai rien trouvé sur les piles (j'espère m ne pas dupliquer). J'essaie de remplacer mes boucles imbriquées par des instructions simples en utilisant if/else. J'ai une liste de trames de données, mais je n'ai pas compris comment accéder aux lignes comme je peux dans les boucles imbriquées. J'utilise la colonne bearingDelta pour remplir une nouvelle liste avec 1 ou 0 selon que la valeur de la colonne bearingDelta est supérieure ou inférieure à 119.9. Aussi, je réalise que cette question peut sembler similaire à une question que j'ai posté récemment, mais je pense que c'est assez différent pour vivre.if/else instruction utilisant lapplication pour parcourir les lignes dans la liste des trames de données dans R

données:

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) 

boucle imbriquée:

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 } 
    } 
} 

lapply (quelque chose comme ceci est ce que je suis en train de faire à).

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

la sortie désirée pour cet ensemble de données de l'échantillon ressemblerait à ceci:

> 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 

Répondre

3

Pas besoin de 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

+1 - aussi 'lapply (df.list, avec, as.integer (bearingDelta> = 119.9)) ' – flodel

+0

@flodel Je n'ai pas utilisé' avec 'comme ça - sera utile, merci – alexwhan

+0

Fonctionne bien, merci beaucoup! – Misc

Questions connexes