首页 > 解决方案 > 使用 R 中数据框中的变量创建基本函数

问题描述

我想创建一个可以帮助我系统地执行此操作的基本功能:

这是数据:

set.seed(1)
a <- as.numeric(c(-5:30))
b <- runif(30,min=0,max=1)

data <- as.data.frame(cbind(a,b))

这就是我所做的

data$adummy <- 0
data$adummy[data$a>0] <-1
obsa <- sum(data$adummy[data$adummy>0]) #Number of positive observations
areceiptshare <- (sum(data$adummy[data$adummy>0]*data$b[data$adummy>0])/sum(data$b))*100 #Weighted share of positive observations
areceiptshare

当我尝试执行通用功能时:

wmean <- function (df,x,w) {

  df$adummy <- 0
  df$adummy[df$x>0] <-1
  obsa <- sum(df$adummy[df$adummy>0]) #Number of observations
  areceiptshare <- (sum(df$adummy[df$adummy>0]*df$w[df$adummy>0])/sum(df$w))*100

}

并在函数中插入数据

result <- wmean (df = data, x = a, w = b)

它产生 NaN 而不是正确的值(在本例中为 82.6063)。我究竟做错了什么?为什么函数不能调用数据框中的列?谢谢!

标签: rfunction

解决方案


我们可以使用[[代替$并将列名作为字符串传递

wmean <- function (df,x,w) {

   df[["adummy"]] <- 0
  df[["adummy"]][df[[x]]>0] <-1
  obsa <- sum(df[["adummy"]][df[["adummy"]]>0]) #Number of observations
  areceiptshare <- (sum(df[["adummy"]][df[["adummy"]]>0]*
           df[[w]][df[["adummy"]]>0])/sum(df[[w]]))*100

 areceiptshare
   }

 wmean (df = data, x = "a", w = "b")

推荐阅读