具有多列和数据帧的函数gsub R.

时间:2017-03-08 09:38:06

标签: r for-loop gsub

我有2个数据框,列名相同。我想替换多个数据帧的2列中的某个表达式。因此我写了以下代码:

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

但为什么重播功能不起作用?

1 个答案:

答案 0 :(得分: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