R 在用户定义函数中调用列名
我想创建一个用户定义的函数来消除代码冗余/重复 我想为multipleR 在用户定义函数中调用列名,r,function,ggplot2,data.table,R,Function,Ggplot2,Data.table,我想创建一个用户定义的函数来消除代码冗余/重复 我想为multiplecol2(有几个级别)和GROUP byGROUP列绘制这样的多个绘图 所需绘图的示例图像: fn.colplot <- function(data, col2, GROUP) { dt_PCT <- data[, .N, by = .(col2, GROUP)] dt_PCT[, PCT := round(100*N/sum(N)), by = .(GROUP)] dt_plot <- ggplot(dt_
col2
(有几个级别)和GROUP byGROUP
列绘制这样的多个绘图
所需绘图的示例图像:
fn.colplot <- function(data, col2, GROUP) {
dt_PCT <- data[, .N, by = .(col2, GROUP)]
dt_PCT[, PCT := round(100*N/sum(N)), by = .(GROUP)]
dt_plot <- ggplot(dt_PCT, aes(GROUP, PCT, fill = factor(col2))) +
geom_col(position = "fill") +
geom_text(aes(label = paste0(PCT,"%")), position = position_fill(vjust = 0.5))
return(dt_plot)
}
我想问一下,在用户定义的函数中,如何在by=
之后调用列名
如果我拿出脚本并插入列的真实名称,它会工作得很好
谢谢大家的建议,我已经通过调用带有如下特定参数的函数解决了这个问题:
fn.colplot(data=dt_-all,col2=“DISTRIBUTORS”,GROUP=“GROUP”)
。我可以顺利地运行函数并绘制很多图。谢谢@RonakShah将列名作为字符串传递,并在函数中进行这些更改
library(data.table)
library(ggplot2)
fn.colplot <- function(data, col2, GROUP) {
dt_PCT <- dt[, .N, c(col2, GROUP)]
dt_PCT[, PCT := round(100*N/sum(N)), by = .(GROUP)]
dt_plot <- ggplot(dt_PCT, aes(.data[[GROUP]], PCT,
fill = factor(.data[[col2]]))) +
geom_col(position = "fill") +
geom_text(aes(label = paste0(PCT,"%")),
position = position_fill(vjust = 0.5))
return(dt_plot)
}
fn.colplot(dt, 'col2', 'group')
库(data.table)
图书馆(GG2)
fn.colplot如果您能够以可复制的格式提供一些toy_数据,这些数据可以复制并尝试使用代码,那么您获得帮助的机会将显著增加。建议的副本:。不要注意带有aes\u字符串的最上面的答案,因为它已经过时了,请使用.data
或代码>其他答案中提到的方法。谢谢!我尝试了你的代码,但问题仍然存在。我认为我在代码中的问题是dt_PCT部分,我没有意识到by
仅在有一列时才对字符串值起作用。对于多个列,我们需要使用mget
。查看我的更新答案。我遇到了错误:未找到'1'的值调用自:(函数(x)stop(gettexf(“未找到%s的值”,sQuote(x)),call.=FALSE))(“1”)
是否需要为ifnotfound
指定值?按字符处理由单个字符向量指定的多个列,而不是()
如果您将这些变量与c()
@1darknight组合在一起,请提供一个可复制的示例,以进一步帮助您。
library(data.table)
library(ggplot2)
fn.colplot <- function(data, col2, GROUP) {
dt_PCT <- dt[, .N, c(col2, GROUP)]
dt_PCT[, PCT := round(100*N/sum(N)), by = .(GROUP)]
dt_plot <- ggplot(dt_PCT, aes(.data[[GROUP]], PCT,
fill = factor(.data[[col2]]))) +
geom_col(position = "fill") +
geom_text(aes(label = paste0(PCT,"%")),
position = position_fill(vjust = 0.5))
return(dt_plot)
}
fn.colplot(dt, 'col2', 'group')