2017-03-08 15 views
1

等しい列名を持つ2つのデータフレームがあります。私は、複数のデータフレームの2つの列で特定の式を置き換えたいです。したがって、私は次のコードを書いた:複数の列とデータフレームを持つ関数gsub 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]) 
    } 
} 

しかし、なぜrepla機能が動作していないのですか?

答えて

1
これにあなたの関数の定義を変更し

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

そして、このようにそれを使用します。

dat1 <- repla(dat1) 

ここでは、このコードを使用した後dat1の出力です:

> 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 
関連する問題