【问题标题】:How to use functions in R如何在 R 中使用函数
【发布时间】:2012-06-22 10:52:35
【问题描述】:

我在 R 中有一个两列数据框,我想添加第三列,其中的值是前两列的函数。 只要函数是简单的数学公式就没有问题 data$c <- data$a*15 - 10 + data$b*0.5 但是我的函数是不连续的并且包含条件,我想做: foo <- function(x,y){if (x<2) {return(0)} else {....} 和 data$c <- foo(data$a, data$b) 但这让我犯了错误。我错过了什么?

【问题讨论】:

  • 在提问时尝试提供更多信息。如果帮助别人帮助你。
  • 这个问题完全可以回答。

标签: r function


【解决方案1】:

您正在寻找ifelse 函数。首先创建一个数据框:

> d <- data.frame(x = rnorm(5), y=rnorm(5))
> d
           x           y
1 -0.3581471  0.18149804
2  0.5096839  0.01260114
3  0.6742558  1.04851531
4  1.0761349 -0.17504221
5 -0.2373933 -1.11475886

现在使用ifelse 创建一个额外的列:

> d$z <- ifelse(d$x < 0, 0, d$y + 1)
> d
           x           y         z
1 -0.3581471  0.18149804 0.0000000
2  0.5096839  0.01260114 1.0126011
3  0.6742558  1.04851531 2.0485153
4  1.0761349 -0.17504221 0.8249578
5 -0.2373933 -1.11475886 0.0000000

【讨论】:

    【解决方案2】:
    df = data.frame(a=rnorm(20),b=runif(20))
    
    new_var = function(x,y)
    {
      if(x<0)
      { x = x^2}
      else
      { x = x^3}
    
      if(y<.5)
      { -log10(y)}
      else
      {
        exp(y)
      }
      return((2*(x+y))/x*y)
    }
    
    df$c = sapply(1:length(df$a), function(i){new_var(df$a[i],df$b[i])})
    
    head(df)
                a          b          c
    1 -0.09149107 0.04834675 0.65517298
    2 -2.43732351 0.04086087 0.08228385
    3 -1.69573283 0.54795413 1.30474339
    4 -0.40106220 0.72952356 8.07641367
    5 -0.38244706 0.65524147 7.18118555
    6  0.76334945 0.38455655 1.43404971
    

    【讨论】:

    • 不要忘记为您认为好的答案投票。克里斯的回答,fyi 在时间和 cpu 使用方面可能更有效。如果您发布了您的功能,我们可以提供更多帮助!
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多