R删除表列中值为0的行
我为一项常规任务编写了一个函数。我将尝试复制我的问题。下面是我的数据的随机样本。它是函数dput(mydataframe)的输出 现在,我的目标是编写一个函数来过滤掉“ssd”列中的非零行。那么它看起来是这样的 我在R中编写了下面的函数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")
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%