我正在尋找使用函數來加速數據清理過程。在所示的例子,我希望消除在上午和下午的列報值,如果這一天的「沒有」一欄有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