r - 使用 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)。我究竟做错了什么?为什么函数不能调用数据框中的列?谢谢!
解决方案
我们可以使用[[
代替$
并将列名作为字符串传递
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")
推荐阅读
- python - 烧瓶密码复杂性检查器
- angular - Angular - 在主机组件上的现有类中添加动态类
- angular - TypeError:无法读取未定义的属性“管道”-Angular 单元测试
- c++ - 数组中的赋值运算符重载
- c# - 无法创建 MyDbContext 类型的对象
- python - 序列化程序中的数据始终为空
- ruby - 在 Heroku 我得到 FFMPEG::Error (Failed encoding.Errors: 编码文件无效。完整输出:)
- java - 如何解决 Java 证书问题?
- c++ - 是否有任何替代方法来实现 WebRTC SFU,只有 1 个上传流?
- javascript - 如何更改可编辑 iFrame 中文本的颜色?