2016-05-19 3 views
-1

So habe ich diese Untergruppe:Der Versuch, zu lernen, wie die verwenden „für“ Schleife

Sbset<-cbind(v1,v2,v3,v4,...vn) 

und ich tun möchte:

ifelse(vi==9,NA,vi) for every vi, i=1,...,n 

und ich möchte lernen, die for-Schleife zu verwenden, um es zu tun (Ich weiß, ich kann es auf andere Weise tun).

Also habe ich versucht:

V<-colnames(Sbset) 

for(i in seq_along(V)){ 
ifelse(Sbset[, Sbset[i]]==9,NA,Sbset[i]) 
} 

aber es tut nichts. Also ich weiß, dass ich nicht verstehe, wie man die für Logik verwendet. Könnten Sie mir bitte helfen? Danke :)

+0

'Sbset [, Sbset [i]]' ist nicht die Spalte, da 'Sbset [i]' nicht der Name der Spalte ist. Sie brauchen stattdessen 'Namen (Sbset) [i]'. Ähnliche Änderung später. – Gopala

+0

Sobald Sie wissen, wie Sie die 'for' Schleife Ansatz verwenden, können Sie einfachere Möglichkeiten, die R bietet, zum Beispiel in diesem Fall können Sie einfach tun is.na (Sbset) <- Sbset == 9' –

+0

Dies ist kein R-spezifisches Problem. –

Antwort

2

einen Datensatz erstellen

v1 <- sample(10,5) 
v2 <- sample(10,5) 
v3 <- sample(10,5) 
v4 <- sample(10,5) 
Sbset <-cbind(v1,v2,v3,v4) 
Sbset 
#  v1 v2 v3 v4 
#[1,] 8 1 6 4 
#[2,] 7 7 4 1 
#[3,] 3 6 5 2 
#[4,] 5 5 3 5 
#[5,] 10 9 9 7 

Verwenden Sie die Schleife

for (i in 1:ncol(Sbset)){ 
    Sbset[,i] <- ifelse(Sbset[,i]==9,NA,Sbset[,i]) 
} 
Sbset 
#  v1 v2 v3 v4 
# [1,] 8 1 6 4 
# [2,] 7 7 4 1 
# [3,] 3 6 5 2 
# [4,] 5 5 3 5 
# [5,] 10 NA NA 7 

Aber es ist besser, nicht eine Schleife

Sbsetpaul <-cbind(v1,v2,v3,v4) # Recreate the dataset 
Sbsetpaul[Sbsetpaul == 9] <- NA 

oder sogar, wie vorgeschlagen zu verwenden, indem Sie @ Frank

Sbsetfrank <-cbind(v1,v2,v3,v4) # Recreate the dataset 
is.na(Sbsetfrank) <- Sbsetfrank == 9 
+0

Sehr nette Antwort. Wie kann ich es so machen, dass die Variablen selbst verändert werden? Wenn ich sie also in Zusammenfassung (vi) anschaue, sehe ich 9, nur NAs an ihrer Stelle? –

+0

'Sbset' ist eine Matrix. Sie können die erste Spalte der Matrix dem Vektor v1 mit 'v1 <- Sbset [, 1]' zuweisen, dann sehen Sie NAs in 'summary (v1)'. Aber normalerweise werden viele Vektoren in einem Datenrahmen gehalten: 'Sbsetnicolas <- data.frame (Sbset)'. Dann wird mit '$' auf die Spalten zugegriffen. 'Zusammenfassung (Sbsetnicolas $ v1)'. –

Verwandte Themen