如何将其转换为R中具有df名称和列名的函数?

如何将其转换为R中具有df名称和列名的函数?,r,function,nas,R,Function,Nas,我正在努力创建一个接受df和列的函数,该函数将用三个不同的列汇总的中间值替换NAs。我需要在八列中重复此操作。您需要的是 快速修复 看起来您要用state/year组的中值替换缺少的值,所以我编写了一个函数来实现这一点 替换中位数% 变异 {{col}:=ifelseis.na{{col},中值{{col},na.rm=TRUE,{col} 返回新的 } 请注意,这将返回一个新的df。要在几列中迭代使用它,每次都必须分配 每月摘要% 替换\u na\u mediancol1%>% 替换\u na

我正在努力创建一个接受df和列的函数,该函数将用三个不同的列汇总的中间值替换NAs。我需要在八列中重复此操作。

您需要的是

快速修复 看起来您要用state/year组的中值替换缺少的值,所以我编写了一个函数来实现这一点

替换中位数% 变异 {{col}:=ifelseis.na{{col},中值{{col},na.rm=TRUE,{col} 返回新的 } 请注意,这将返回一个新的df。要在几列中迭代使用它,每次都必须分配

每月摘要% 替换\u na\u mediancol1%>% 替换\u na\u mediancol2%>% ... 等等

有更好的办法 要将一组列中的所有NAs替换为年/州分组的中位数,可以使用dplyr::cross。没有中间函数,也不必单独指定使用的每一列

用年份/州中位数替换列a、b和c中的所有NAs df%>% 按州划分的组别,年份%>% 变异 acrossa:c,functionx-ifelseis.nax,medianx,na.rm=TRUE,x 笔记 整洁的评估不是一个小话题,顶部的链接比我解释的要好得多。不过,快速修复是相当容易的。关于您的代码,我还想指出一些其他方面

您不必删除函数中定义的变量。一旦函数结束,它们将自动删除。 您不需要汇总然后合并以获得组的中位数。只需像上面的代码那样分组并使用mutate。 当州/年组合都是NA值时,不清楚该怎么办。发生这种情况时,在上面的代码中,值保持NA。
变量名不是字符串。你好,凯蒂!欢迎来到SO!我想你可能想试试dplyr的na_if函数。您可以在这里看到示例:。在将来,包含一个可复制的例子会很有帮助。我在上面的第一个代码中所做的工作非常好,并给出了我需要的结果。我只是不想为每一列创建8次,所以我希望用一个函数来简化。there's a better way工作得非常完美,速度非常快。非常感谢。回答得好!我建议进一步改进,有更好的方法,acrossa:c,~replace_na.,median.,na.rm=true乐意帮助!如果这完全回答了你的问题,你可以接受它作为答案