R删除表列

时间:2018-12-24 05:46:46

标签: r function

我为我的一项常规任务编写了一个函数。我将尝试重复我的问题。以下是我的数据外观的随机样本。它是函数dput(mydataframe)的输出

structure(list(respid = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), ssd = c(0, 
225, 236, 0, 221, 0, 0, 269, 265, 0), tea = c(228, 0, 269, 0, 
258, 241, 0, 222, 0, 256), juice = c(0, 236, 0, 236, 236, 0, 
236, 225, 242, 296), vad = c(236, 235, 0, 235, 235, 0, 235, 258, 
0, 236), energy = c(0, 235, 236, 235, 0, 236, 235, 0, 236, 0)), .Names = c("respid", 
"ssd", "tea", "juice", "vad", "energy"), row.names = c(NA, -10L
), class = c("tbl_df", "tbl", "data.frame"))

现在,我的目标是编写一个函数来过滤“ ssd”列中的非零行。然后看起来像这样

non-zero

我在R中编写了以下函数

SoT <- function(df,key) {
  df2 <- df %>% dplyr::filter(key > 0)
  df3 <- janitor::adorn_totals(df2, where = "row")
  df4 <- tail(df3,1) %>% janitor::adorn_percentages(denominator = "row") %>% janitor::adorn_pct_formatting()
  return(df4)
}
我想要的输出只是列总数之和的百分比(在对ssd> 0进行过滤之后)。在上面的函数中,我只是给函数2个输入。 1是数据框,另一个是我要过滤的“变量名”。我正在这样调用函数:

SoT(df1, "ssd")

在下面的图片中,我想要的结果是绿色的,但是我得到了黄色的。

enter image description here

这意味着代码中的“过滤器功能”不起作用。但是,如果我简单地逐行使用它而不是将其包装在函数中,则一切工作正常。有什么建议吗?

我没有删除图像(仅供参考),但是我已按照建议使数据和代码可再现。

1 个答案:

答案 0 :(得分:1)

使用_params= new WorkerQueryParameters() _repo.Setup(x => x.GetAll(_params)).Returns(workersq); IQueryable<Worker> tst = _repo.Object.GetAll(_params); var OkResponse = _controller.GetAllWorkers(_params); 进行编程时(例如,指定要过滤的dplyr),您需要弄清楚要从哪个环境定义key

https://dplyr.tidyverse.org/articles/programming.html

在这种情况下,要使用传递给函数的key,需要执行两个步骤:

1)使用key引用key参数

2)使用enquo()

取消引用

这些共同告诉dplyr您要使用传递到函数中的!!,而不要使用可能在函数外部定义的其他key

key