我正在寻找使用函数来加速数据清理过程。在所示的例子,我希望消除在上午和下午的列报值,如果这一天的“没有”一栏有1将部分列名传递给函数
df1 = data.frame (identifier = c(1:4), mon.no = c(1,NA,NA,NA),mon.am = c(2,1,NA,3),mon.pm = c(3,4,NA,5), tues.no = c(NA,NA,1,NA),tues.am = c(2,3,1,4),tues.pm = c(3,3,2,3))
我设想使用函数值使用天清理数据:
clean1 = function (day) {
df1$day.am[df1$day.no==1] = NA
df1$day.pm[df1$day.no==1] = NA
return (df1)}
df2 = clean1(mon)
但是,这会返回以下错误。
Error in `$<-.data.frame`(`*tmp*`, "day.am", value = logical(0)) :
replacement has 0 rows, data has 4
我认为这是因为该函数需要一个完整的列名称,并且无法填充文本输入周围的间隙?是否有可能以这种方式使用功能?
阅读these notes我认为最好让我的数据保持整洁,并且正在处理涉及重新组织数据的解决方案。但是,当数据处于原始格式时,能够做到这一点也很方便。
谢谢。
不,这是因为你将星星传递给它,它不知道星期一是什么。你必须传递一个对象或字符串到一个函数。 mon既不是。所以你有一天的参数,但实际上并没有在函数中使用day参数。 – 2012-04-16 13:39:16
我认为'grep'系列中的东西就是你所追求的。 – 2012-04-16 13:41:36