1

関数を使用してデータクリーニングプロセスを高速化することを検討しています。示されている例では、その日の「.no」列の値が1の場合、am列とpm列で報告された値を削除しようとしています。

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

これは、関数が完全な列名を予期していて、テキスト入力の周りのギャップを埋めることができないためだと思いますか?そのように関数を使うことは可能ですか?

これらのメモを読んだことで、データを整理された形式にし、データの再編成を含むソリューションに取り組んでいる方がよいと思います。ただし、データが元の形式であるときにこれを実行できると便利です。

ありがとう。

4

1 に答える 1

1

あなたは本当に近いです。コメントの@TylerRinkerは、なぜそれが機能しないのかを説明しています。修正は次のとおりです。

clean1 = function (day) {
  day.am = paste(day, "am", sep=".") # make a string from the variable day and the suffixes
  day.pm = paste(day, "pm", sep=".")
  day.no = paste(day, "no", sep=".")
  df1[day.am][df1[day.no]==1] = NA 
  df1[day.pm][df1[day.no]==1] = NA
  return (df1)}

df2 = clean1("mon")   # "mon" should be a string

他の誰かがこれを行うためのより効率的な方法を提供するかもしれません。ここでは、オリジナルからのみ作業していることに注意してくださいdf1。今実行する場合

df3 = clean1("tues")

両方の日がクリーンアップされたデータフレームは取得されません。関数に作用するデータフレームを提供することで、これを修正できます。

clean2 = function(df, day){...
于 2012-04-16T13:51:29.573 に答える