私はおおよそ以下のようなデータフレームを持っています(これは説明のために作成された近似であり、以下のリンクからダウンロードしたり、以下に貼り付けたdput()から取得できるデータフレームの正確なレプリカではありません):
March_created_at March_email March_type April_created_at April_email April_type
3/11/12 7:28 jeremy@asynk.ch PushEvent 4/1/12 4:03 PushEvent
3/11/12 7:28 jeremy@asynk.ch PushEvent 4/1/12 4:03 PushEvent
3/11/12 7:28 jeremy@asynk.ch PushEvent 4/1/12 4:03 PushEvent
3/11/12 7:28 jeremy@asynk.ch PushEvent 4/1/12 7:03 high IssuesEvent
3/11/12 11:06 medium PushEvent 4/1/12 13:57 medium PushEvent
3/11/12 11:06 medium PushEvent 4/1/12 13:57 medium PushEvent
3/11/12 11:06 medium PushEvent 4/1/12 13:57 medium PushEvent
3/11/12 12:46 PushEvent
3/11/12 12:46 PushEvent
3/11/12 12:46 PushEvent
完全なデータセットは、CSVファイルとしてここにあります
次の入力を受け取る関数を作成しようとしています。
- データフレーム
- そのデータフレームの特定の列
- 文字列のリスト(例:メールアドレスのセット)
- 置換文字列(例:「低」)
ここで、関数でそのデータフレームの指定された列のみを調べ、上記のポイント3で指定された文字列のリストと一致しないすべての文字列(および空のセル)をポイント4の置換文字列に置き換えます。ただし、これは次の条件が当てはまる場合にのみ実行する必要があります。
検討中のセルには、同じ月のタイムスタンプが必要です。
たとえば、「March_email」列の8行目の空のセルを置き換えようとしているとします。「March_created_at」列の8行目にタイムスタンプがあることがわかります。そのため、先に進んで、この空のセルを指定された文字列(たとえば、「low」)に置き換えることができます。ただし、「April_email」列の8行目を見てください。このセルも空であり、列「April_created_at」の行8のセルも空です。この場合、何もする必要はありません(つまり、文字列は挿入されません)。
これを実行したい理由は、データがないために特定のセルが空であるため、何も挿入しないためです。データが欠落しているため、他のセルは空です。したがって、上記で指定した関数に基づいてデータを代入する必要があります。
Rでこれをどのように達成できますか?
付録:データセットのヘッドのdput()は次のとおりです。
structure(list(March_created_at = c("2012-03-11 07:28:04", "2012-03-11 07:28:04",
"2012-03-11 07:28:04", "2012-03-11 07:28:19", "2012-03-11 07:28:19",
"2012-03-11 07:28:19"), March_actor_attributes_email = c("jeremy@asynk.ch",
"jeremy@asynk.ch", "jeremy@asynk.ch", "jeremy@asynk.ch", "jeremy@asynk.ch",
"jeremy@asynk.ch"), March_type = c("PushEvent", "PushEvent",
"PushEvent", "PushEvent", "PushEvent", "PushEvent"), April_created_at = c("2012-04-01 04:03:13",
"2012-04-01 04:03:13", "2012-04-01 04:03:13", "2012-04-01 07:03:11",
"2012-04-01 07:03:11", "2012-04-01 07:03:11"), April_actor_attributes_email = c("",
"", "", "high", "high", "high"), April_type = c("PushEvent",
"PushEvent", "PushEvent", "IssuesEvent", "IssuesEvent", "IssuesEvent"
), May_created_at = c("2012-05-01 00:16:05", "2012-05-01 00:16:05",
"2012-05-01 00:16:05", "2012-05-01 01:03:19", "2012-05-01 01:03:19",
"2012-05-01 01:03:19"), May_actor_attributes_email = c("john.firebaugh@gmail.com",
"john.firebaugh@gmail.com", "john.firebaugh@gmail.com", "mitch.tishmack@gmail.com",
"mitch.tishmack@gmail.com", "mitch.tishmack@gmail.com"), May_type = c("PushEvent",
"PushEvent", "PushEvent", "IssueCommentEvent", "IssueCommentEvent",
"IssueCommentEvent"), June_created_at = c("2012-06-01 00:25:05",
"2012-06-01 00:25:05", "2012-06-01 00:25:05", "2012-06-01 00:42:29",
"2012-06-01 00:42:29", "2012-06-01 00:42:29"), June_actor_attributes_email = c("michaelklishin@me.com",
"michaelklishin@me.com", "michaelklishin@me.com", "", "", ""),
June_type = c("IssueCommentEvent", "IssueCommentEvent", "IssueCommentEvent",
"PushEvent", "PushEvent", "PushEvent"), July_created_at = c("2012-07-01 13:46:20",
"2012-07-01 13:46:20", "2012-07-02 11:53:37", "2012-07-02 11:53:37",
"2012-07-02 12:27:30", "2012-07-02 12:27:30"), July_actor_attributes_email = c("medium",
"medium", "ryoqun@gmail.com", "ryoqun@gmail.com", "ryoqun@gmail.com",
"ryoqun@gmail.com"), July_type = c("PushEvent", "PushEvent",
"CreateEvent", "CreateEvent", "PushEvent", "PushEvent"),
August_created_at = c("2012-08-01 00:04:09", "2012-08-01 00:04:09",
"2012-08-01 00:04:42", "2012-08-01 00:04:42", "2012-08-01 00:05:04",
"2012-08-01 00:05:04"), August_actor_attributes_email = c("jeremy@asynk.ch",
"jeremy@asynk.ch", "jeremy@asynk.ch", "jeremy@asynk.ch",
"jeremy@asynk.ch", "jeremy@asynk.ch"), August_type = c("IssueCommentEvent",
"IssueCommentEvent", "IssuesEvent", "IssuesEvent", "IssueCommentEvent",
"IssueCommentEvent"), September_created_at = c("2012-09-01 18:12:24",
"2012-09-01 18:12:24", "2012-09-01 23:51:18", "2012-09-01 23:51:18",
"2012-09-02 00:34:54", "2012-09-02 00:34:54"), September_actor_attributes_email = c("ryoqun@gmail.com",
"ryoqun@gmail.com", "ryoqun@gmail.com", "ryoqun@gmail.com",
"ryoqun@gmail.com", "ryoqun@gmail.com"), September_type = c("CommitCommentEvent",
"CommitCommentEvent", "CreateEvent", "CreateEvent", "PushEvent",
"PushEvent"), October_created_at = c("2012-10-01 07:48:38",
"2012-10-01 10:01:40", "2012-10-01 10:01:43", "2012-10-01 10:17:00",
"2012-10-01 16:08:29", "2012-10-01 18:06:46"), October_actor_attributes_email = c("medium",
"medium", "medium", "medium", "", "core"), October_type = c("PushEvent",
"IssuesEvent", "PushEvent", "PushEvent", "ForkEvent", "PullRequestEvent"
)), .Names = c("March_created_at", "March_actor_attributes_email",
"March_type", "April_created_at", "April_actor_attributes_email",
"April_type", "May_created_at", "May_actor_attributes_email",
"May_type", "June_created_at", "June_actor_attributes_email",
"June_type", "July_created_at", "July_actor_attributes_email",
"July_type", "August_created_at", "August_actor_attributes_email",
"August_type", "September_created_at", "September_actor_attributes_email",
"September_type", "October_created_at", "October_actor_attributes_email",
"October_type"), row.names = c(NA, 6L), class = "data.frame")