2017-03-08 3 views
1

Ich habe 2 Datenrahmen mit gleichen Spaltennamen. Ich möchte einen bestimmten Ausdruck in 2 Spalten von mehreren Datenrahmen ersetzen. Daher habe ich folgenden Code geschrieben:Funktion gsub mit mehreren Spalten und Datenrahmen R

dat <- data.frame(n = 1:19, des = c("Some very long text", "Some very lang test", "Some vary long text", "Some veri long text", "Another very long text", "Anather very long text", "Another very long text", "Different text", "Diferent text", "More text", "More test", "Much more text", "Muh more text", "Some other long text", "Some otoher long text", "Some more text", "Same more text", "New text", "New texd"), x = c("other text", "bad text", "wrong text", "very bad text", "very nice text","text", "text", "text", "text", "text", "text", "text", "text", "text", "text", "text", "text", "text", "text")) 

dat1 <- data.frame(n = 1:5, des = c("very Some long text", "text Some very long", "Some very long text", "long text Some very", "very long Some text"), x = c("crazy text", "very crazy text", "boring text", "very exciting text","ext")) 

repla <- function(dat){ 
vari <- c(which(names(dat) == "x"),which(names(dat) == "des")) 
    for (i in vari){ 
    dat[,i] <<- gsub("very", "0", dat[,i]) 
    } 
} 

Aber warum funktioniert die Repla-Funktion nicht?

Antwort

1

Funktionsdefinition Um dies zu ändern:

repla <- function(dat){ 
vari <- c(which(names(dat) == "x"),which(names(dat) == "des")) 
    for (i in vari) { 
     # don't use the parent scope assignment operator here 
     # instead, just modify the local variable 
     dat[,i] <- gsub("very", "0", dat[,i]) 
    } 

    # return modified data frame to the caller 
    return(dat) 
} 

Und es dann wie folgt zu verwenden:

dat1 <- repla(dat1) 

Hier ist die Ausgabe von dat1 nach der Verwendung dieser Code ist:

> dat1 
    n    des    x 
1 1 0 Some long text  crazy text 
2 2 text Some 0 long 0 crazy text 
3 3 Some 0 long text  boring text 
4 4 long text Some 0 0 exciting text 
5 5 0 long Some text    ext 
Verwandte Themen