使用用户定义的函数在R中创建一个新列

时间:2014-02-12 08:26:36

标签: r pattern-matching

我正在尝试对列进行模式匹配,并使用用户定义的函数创建一个包含匹配模式的一部分的新列。

表名是数据,它包含

MatchedColumn
24 abcd
32 gcef
45 lmno

代码是

f4<-function()
{
  data$NewColumn <- gsub('([0-9]{2}) *','\\1',data$MatchedColumn)
}

我将函数调用为f4(),但它没有执行函数的内部部分。

但是当我单独运行以下行时,它会在匹配后创建一个新列,并且生成的表如图所示。

data$NewColumn <- gsub('([0-9]{2}) *','\\1',data$MatchedColumn)

数据:

MatchedColumn  NewColumn
 24 abcd         24
 32 gcef         32
 45 lmno         45

我正在尝试使用用户定义的函数,因为我想通过函数传递 NewColumn MatchedColumn 名称,类似于f4(NewColumn,MatchedColumn)

如果有人知道怎么做,请帮忙!

1 个答案:

答案 0 :(得分:0)

有几种选择:

  • 您可以将数据作为参数传递给函数

    f4<-function(data, col1, col2)
    {
       data[,col1] <- sapply(data[col2], function(x)gsub("[^0-9]", "", x))
       return(data)
    }
    
    newdata <- f4(data, 'NewColumn', 'MatchedColumn')
    str(newdata)
    
  • 您可以使用<<-

    进行全局分配
    f4<-function(col1, col2)
    {
      data[col1] <<- sapply(data[col2], function(x)gsub("[^0-9]", "", x))
    }
    
    f4('NewColumn', 'MatchedColumn')
    

我肯定更喜欢第一个选项