具有多列和数据框 R 的函数 gsub

function gsub with multiple columns and data frames R

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

但是为什么repla功能不起作用?

将您的函数定义更改为:

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