2017-11-15 8 views
0

Ich versuche, Variablennamen in for-Schleife in R. Zum Beispiel zu verweisen, wenn ich jede Variable für jede der folgenden Variablen von numerischen auf eine Zeichenfolge ändern mögeWie referenziert man Variablennamen in einer for-Schleife in R?

xtable<- tbl_df(cbind(x1=c(1,2,3), x2=c(3,4,5))) 

for (varname in names(xtable)) { 
xtable$varname<- as.character(xtable$varname) 
} 

oder umbenennen ein durch Hinzufügen ' a‘nach jedem Variablennamen

for (varname in names(xtable)) { 
dplyr::rename(xtable, varname = paste0(varname,'a', sep='')) 
} 

im allgemeinen ich habe Probleme für Schleife als Variablennamen es darstellt und nicht als das Wort‚varname‘die Indexvariable‚varname‘innerhalb der Referenzierung.

+0

In beiden Beispielen gibt es keine Notwendigkeit für eine 'for' Schleife –

+0

' XTABLE [, varname] ' –

+0

@docendodiscimus wie würde ich es tun, ohne eine for-Schleife? Aber für kompliziertere Komplikationen, wie Indexvariablen in einer for-Schleife als Variablennamen selbst referenzieren? – Amazonian

Antwort

0

Beachten Sie, dass tbl_df in der dplyr-Bibliothek entzogen ist. Aber Sie können data.frame oder as.data.frame einfach verwenden.

xtable <- data.frame(x1=c(1,2,3), x2=c(3,4,5)) 
str(xtable) # shows the structure of the data.frame 

R erlaubt uns, Vektoroperationen leicht durchzuführen, die die Anforderungen für viele Schleifen wegnehmen.

# lapply applies a function to every column in a data.frame 
xtable <- as.data.frame(lapply(xtable,as.character)) 
str(xtable) # shows the structure of the data.frame 

# we can directly input into the names() of an object 
# paste0 has a default separator of '' 
# If we put a vector into paste0 it will return a vector! 
names(xtable) <- paste0(names(xtable),"a") 
str(xtable) 

Aber wenn Sie wirklich einen Variablennamen in einer Schleife (für ein anderes Problem) verweisen müssen

for(varname in names(xtable)) { 
    print(xtable[varname]) # xtable[varname] outputs a table with one column including header 
    print(xtable[[varname]]) # xtable[[varname]] outputs only the contects of the varname vector 
} 
+0

Wenn Sie nur einen Namen aktualisieren möchten ... verwenden Sie die [], um es zu tun. Namen (xtable) [2] <- "x2b" #Nur den zweiten Namen aktualisieren –

+0

arbeitete wie ein Charme! Vielen Dank! – Amazonian

+0

'as.tibble' ist der Ersatz für' tbl_df' – useR

1

Wie andere erwähnt haben, gibt es keine Notwendigkeit, eine for Schleife in beide zu verwenden Ihre Fälle. Es gibt zwei Komfortfunktionen in dplyrmutate_all und mutate_if genannt, die Sie den ersten Fall tun lassen sehr leicht:

library(dplyr) 

# Convert all columns to character 
xtable %>% 
    mutate_all(as.character) 

# Convert all numeric columns to character 
xtable %>% 
    mutate_if(is.numeric, as.character) 

Ergebnis:

# A tibble: 3 x 2 
    x1 x2 
    <chr> <chr> 
1  1  3 
2  2  4 
3  3  5 

Für zweiten Fall auch setNames verwenden können und Kette mit dem ersten Fall:

xtable %>% 
    mutate_all(as.character) %>% 
    setNames(paste0(names(xtable), "a")) 

Ergebnis:

# A tibble: 3 x 2 
    x1a x2a 
    <chr> <chr> 
1  1  3 
2  2  4 
3  3  5 
Verwandte Themen