病院入院時の患者の位置を保持するデータフレームを使用しています。各行は、その人物(= ID)の一定期間(BeginTimからEndTimeまで)の新しい場所(=部門、部屋、ベッド)を表すように書式が設定されています。ここでデータフレームを期間ごとの行から1日に1行に変換する
は、初期データフレームのサンプルです:
print(data_perlocation[1:10,])
ID department BeginTime EndTime room Bed
<dbl> <chr> <chr> <chr> <dbl> <dbl>
1 2156864 L14B 2016-03-02 09:40:00.0000000 2016-03-02 15:20:00.0000000 102 3
2 2161034 B51A 2016-06-07 00:00:00.0000000 2016-06-07 11:02:00.0000000 109 2
3 2161034 B51A 2016-06-06 09:00:00.0000000 2016-06-06 10:27:00.0000000 109 2
4 2161034 B51A 2016-06-06 12:47:00.0000000 2016-06-07 00:00:00.0000000 109 2
5 2161034 B51A 2016-06-06 10:27:00.0000000 2016-06-06 12:47:00.0000000 103 3
6 2176442 L14B 2016-02-04 07:15:00.0000000 2016-02-04 13:47:00.0000000 101 4
7 2176754 B61A 2016-03-15 07:16:00.0000000 2016-03-15 14:56:00.0000000 109 3
8 2176754 B61A 2016-03-16 08:10:00.0000000 2016-03-17 00:00:00.0000000 109 3
9 2176754 B61A 2016-03-15 14:56:00.0000000 2016-03-16 08:10:00.0000000 109 2
10 2176754 B61A 2016-03-17 00:00:00.0000000 2016-03-17 11:18:00.0000000 109 3
11 2184060 B61A 2016-03-10 20:25:00.0000000 2016-03-11 00:00:00.0000000 105 2
12 2184060 B61A 2016-03-10 20:01:00.0000000 2016-03-10 20:25:00.0000000 105 1
13 2184060 B61A 2016-03-11 00:00:00.0000000 2016-03-12 00:00:00.0000000 105 2
14 2184060 B61A 2016-03-12 00:00:00.0000000 2016-03-12 14:00:00.0000000 105 2
私は日ごとに行がありますように、このデータフレームを変換したいです。したがって、IDと入場日を保持する列を持つ新しいデータフレームを作成しました。このように:
ID Date
1 2156864 2016-03-02
2 2161034 2016-06-06
3 2161034 2016-06-07
4 2176442 2016-02-04
5 2176754 2016-03-15
6 2176754 2016-03-16
7 2176754 2016-03-17
8 2184060 2016-03-10
9 2184060 2016-03-11
10 2184060 2016-03-12
は今、私はID
を照合し、どこbeginDate
は日付と一致するとdata_byday
行にdata_bylocation
データフレーム内に存在している日あたりの(複数の)場所(複数可)を追加したいです。
私はforと2つのif文を結合しました。これまでの私の試みは、望みの結果に近いものを与えていないし、もっと簡単な方法でなければならないと思う。私はR、まだ学習に非常に新しいです
ID Date BeginTime1 EndTime1 department1 room1 bed1 BeginTime2 EndTime2 department2 room2 bed2 [3rd location, etc]
1 2156864 2016-03-02 [first location of this day] [second location of this day]
2 2161034 2016-06-06
3 2161034 2016-06-07
4 2176442 2016-02-04
5 2176754 2016-03-15
6 2176754 2016-03-16
7 2176754 2016-03-17
8 2184060 2016-03-10
9 2184060 2016-03-11
10 2184060 2016-03-12
:望ましい結果は次のようになります
data_perday[,3] <- NA
for (index in 1:nrow(data_perlocation)){
if (data_perlocation$ID[index]==data_perday$ID & as.Date(as.character(data_perlocation$BeginTime[index]), format="%Y-%m-%d")==as.Date(data_perday$Date, format="%Y-%m-%d")) {
if (is.na(data_perday[index,3])){
##code to assign location and time of for that day
} else {
##code to assign second location and time of for that day and place
}}}
:私の最後の試みは、このようなものをアップしました。私はしばらくこの問題に立ち往生してきました。だから、正しい方向のヒントは非常に高く評価されています!
EDIT:
再現例:
data_byday <- structure(list(ID = c(2156864, 2161034, 2161034, 2176442, 2176754, 2176754, 2176754, 2184060, 2184060, 2184060), Date = c("2016-03-02", "2016-06-06", "2016-06-07", "2016-02-04", "2016-03-15", "2016-03-16", "2016-03-17", "2016-03-10", "2016-03-11", "2016-03-12")), .Names = c("ID", "Date"), row.names = c(NA, 10L), class = "data.frame")
data_bylocation <- structure(list(ID = c(2156864, 2161034, 2161034, 2161034, 2161034, 2176442, 2176754, 2176754, 2176754, 2176754, 2184060, 2184060, 2184060, 2184060), department = c("L14B", "B51A", "B51A", "B51A", "B51A", "L14B", "B61A", "B61A", "B61A", "B61A", "B61A", "B61A", "B61A", "B61A"), BeginTime = c("2016-03-02 09:40:00.0000000", "2016-06-07 00:00:00.0000000", "2016-06-06 09:00:00.0000000", "2016-06-06 12:47:00.0000000", "2016-06-06 10:27:00.0000000", "2016-02-04 07:15:00.0000000", "2016-03-15 07:16:00.0000000", "2016-03-16 08:10:00.0000000", "2016-03-15 14:56:00.0000000", "2016-03-17 00:00:00.0000000", "2016-03-10 20:25:00.0000000", "2016-03-10 20:01:00.0000000", "2016-03-11 00:00:00.0000000", "2016-03-12 00:00:00.0000000"), EndTime = c("2016-03-02 15:20:00.0000000", "2016-06-07 11:02:00.0000000", "2016-06-06 10:27:00.0000000", "2016-06-07 00:00:00.0000000", "2016-06-06 12:47:00.0000000", "2016-02-04 13:47:00.0000000", "2016-03-15 14:56:00.0000000", "2016-03-17 00:00:00.0000000", "2016-03-16 08:10:00.0000000", "2016-03-17 11:18:00.0000000", "2016-03-11 00:00:00.0000000", "2016-03-10 20:25:00.0000000", "2016-03-12 00:00:00.0000000", "2016-03-12 14:00:00.0000000"), room = c(102, 109, 109, 109, 103, 101, 109, 109, 109, 109, 105, 105, 105, 105), Bed = c(3, 2, 2, 2, 3, 4, 3, 3, 2, 3, 2, 1, 2, 2)), .Names = c("ID", "department", "BeginTime", "EndTime", "room", "Bed"), row.names = c(NA, -14L), class = c("tbl_df", "tbl", "data.frame"))
第二の例:
data_bylocation2 <- structure(list(ID = c(2224003, 2224003, 2224003, 2248787, 2248787,2248787, 2248787, 2248787), department = c("B12A", "B12A", "B12A","B53A", "B53A", "B53A", "B53A", "B53A"), BeginTime = c("2016-02-12 08:00:00.0000000", "2016-02-12 13:40:00.0000000", "2016-02-15 00:00:00.0000000", "2016-04-20 10:00:00.0000000", "2016-04-22 00:00:00.0000000", "2016-04-23 00:00:00.0000000", "2016-04-24 11:47:00.0000000", "2016-04-26 00:00:00.0000000"), EndTime = c("2016-02-12 13:40:00.0000000", "2016-02-15 00:00:00.0000000", "2016-02-15 16:17:00.0000000", "2016-04-22 00:00:00.0000000", "2016-04-23 00:00:00.0000000", "2016-04-24 11:47:00.0000000", "2016-04-26 00:00:00.0000000", "2016-04-26 16:00:00.0000000"), room = c(205, 209, 209, 306, 306, 306, 311, 311), bed = c(3, 1, 1, 2, 2, 2, 4, 4)), .Names = c("ID", "department", "BeginTime", "EndTime", "room", "bed"), row.names = c(NA, -8L), class = c("tbl_df", "tbl", "data.frame"))
? – useR
実際、大きなデータフレームから2つの異なるサンプルを投稿しました。質問を編集して、IDがサンプルに一致するようにしました。 – FtD
は、data.tables dcastで1つのライナーのように見えますが、データを自分自身でコピーするのは怠惰です。 "data < - data.frame(x = 1:10、y = 11)という形で再現可能な例を提供できますか? :20) "私はちょうどこれを確認するためにペーストをコピーできますか?あるいは、 "data