r - 将 data.frame 列名传递给函数
问题描述
我看过类似的帖子,提到需要使用引号将列名传递给函数,但我可以使用帮助来解决我的错误以及如何改进函数。例如,也许我可以添加一个“后缀”参数来自动为新分配data.frame
一个原始名称的后缀?我希望能够拥有一个通用函数,可用于不同的列名和位置。谢谢你。
library(tidyverse)
# function definition #
createhrly_0595quants <- function(df, hourcolumn,
value, qtype, metadata_to_add) {
df <- df %>% group_by(hourcolumn) %>%
summarize(`05%`=quantile(value, probs=0.05, type =qtype),
`95%`=quantile(value, probs=0.95, type = qtype),
median = median(value), n=n()) %>%
mutate(qtype = qtype, metadata_to_add = metadata_to_add)
}
# sample data.frame #
hrly_gmt <- seq(from=as.POSIXct("2018-11-20 01:00",
tz="America/Los_Angeles"), to=as.POSIXct("2018-11-20 23:00",
tz="America/Los_Angeles"), by="1 hours")
myvalues1 <- rnorm(23)
myvalues2 <- rnorm(23)
mydf1 <- data.frame(hrly_gmt, myvalues1) %>% mutate(class = "a")
mydf2 <- data.frame(hrly_gmt, myvalues2) %>% mutate(class = "b")
df_x <- rbind(mydf1, mydf2)
# function use #
df_0595quants <- createhrly_0595quants(df_x, "hrly_gmt",
"myvalues", 4, "version x.2")
解决方案
group_by
当我们将字符串作为输入传递时,我们可以使用group_by_at
将字符串作为列名而不是 using ,该summarize
列可以转换为符号 ( sym
) 和评估 ( !!
)
createhrly_0595quants <- function(df, hourcolumn,
value, qtype, metadata_to_add) {
value <- rlang::sym(value)
df %>%
group_by_at(vars(hourcolumn)) %>%
summarize(`05%`=quantile(!!value, probs=0.05, type =qtype),
`95%`=quantile(!!value, probs=0.95, type = qtype),
median = median(!!value), n=n()) %>%
mutate(qtype = qtype,
metadata_to_add = metadata_to_add)
}
createhrly_0595quants(df_x, "hrly_gmt",
"myvalues", 4, "version x.2")
推荐阅读
- django - 尽管字段为空,但序列化器 is_valid() 返回 true
- node.js - 从远程数据库获取数据的问题
- python - Django : TemplateDoesNotExist 在 /
- android - 在屏幕旋转时在 ViewPager 中显示带有数据的片段
- objective-c - NSDate:我只输入UTC时间组件并正确设置日历,但NSDate不知何故被重新计算到我的时区
- javascript - 如何使 INPUT 字段在 Bootstrap4/jQuery webapp 中动态更改为 TEXTAREA?
- vb.net - Visual Basic:从目录中读取文件名
- ruby-on-rails - 替代 URI.escape 以避免 Lint/UriEscapeUnescape 警告?
- java - 我正在尝试获取集合中的最后一个日期元素,但是它一直返回第一个?
- java - 我的老师说我应该将布尔变量移动到循环中。但我不明白该怎么做