R删除表列中值为0的行

R删除表列中值为0的行,r,function,R,Function,我为一项常规任务编写了一个函数。我将尝试复制我的问题。下面是我的数据的随机样本。它是函数dput(mydataframe)的输出 现在,我的目标是编写一个函数来过滤掉“ssd”列中的非零行。那么它看起来是这样的 我在R中编写了下面的函数 SoT <- function(df,key) { df2 <- df %>% dplyr::filter(key > 0) df3 <- janitor::adorn_totals(df2, where = "row")

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

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

我在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)
}
下图中我想要的结果是绿色的,但我得到的是黄色的

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


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

当您使用
dplyr
编程时,例如指定要使用的
,您需要澄清您希望从哪个环境定义

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

1) 使用
enquo()

2) 使用
将其解压缩

总之,它们告诉dplyr您想要使用传递到函数中的
键,而不是在函数之外定义的任何其他

SoT <- function(df,key) {
  key_quoted <- enquo(key)
  df2 <- df %>% dplyr::filter(!!key_quoted > 0)
  df3 <- janitor::adorn_totals(df2, where = "row")
  df4 <- tail(df3,1) %>% janitor::adorn_percentages(denominator = "row") %>% janitor::adorn_pct_formatting()
  return(df4)
}

SoT(df1, ssd)
# respid   ssd   tea juice   vad energy
# Total 28.0% 17.3% 21.6% 16.8%  16.3%

SoT请学习如何提出可重复的问题。这包括以下内容:(1)命名非基本包或包含非标准函数的代码(例如,
adorn_totals
),或者不使用它们;(2) 不要提供代码或数据的图像,它不能被复制或搜索,破坏屏幕阅读器,并且可能不适合所有移动设备();(3) 以更易消耗的格式提供示例数据,例如来自
dput(头(x))
(也适用于所需)()。
0
可能不是真正的
0
。可能是0.000001`并且可能会出现这种结果。我真的说不出来,因为你只提供图片,不提供数据。我明白,我会修改这个问题。非常感谢你的解释。代码现在运行良好。。!非常感谢。
SoT(df1, "ssd")
SoT <- function(df,key) {
  key_quoted <- enquo(key)
  df2 <- df %>% dplyr::filter(!!key_quoted > 0)
  df3 <- janitor::adorn_totals(df2, where = "row")
  df4 <- tail(df3,1) %>% janitor::adorn_percentages(denominator = "row") %>% janitor::adorn_pct_formatting()
  return(df4)
}

SoT(df1, ssd)
# respid   ssd   tea juice   vad energy
# Total 28.0% 17.3% 21.6% 16.8%  16.3%