병원 입원 중 환자의 위치를 유지하는 데이터 프레임을 사용하고 있습니다. 해당 행 (= ID)에 대한 특정 기간 (BeginTim에서 EndTime까지) 동안 새로운 위치 (= 부서, 방, 침대)를 나타내는 방식으로 형식이 지정됩니다.데이터 프레임을 기간별 행에서 일일 행으로 변환
다음은 초기 데이터 프레임의 샘플입니다 :
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와 if 문을 결합했습니다. 지금까지의 시도는 원하는 결과에 가까운 것을 제공하지 못했고, 나는이 일을 훨씬 쉽게 할 수있는 방법이라고 생각합니다. 여전히 학습,
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
내가 R에 아주 새로운 해요 :
이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"))
번째 예 :
library(dplyr)
library(tidyr)
library(lubridate)
data_bylocation %>%
mutate(Date = date(BeginTime)) %>%
gather(variable, value, -ID, -Date) %>%
group_by(ID, Date, temp = variable) %>%
mutate(index = row_number(),
variable = paste0(variable, index)) %>%
ungroup() %>%
select(-(temp:index)) %>%
spread(variable, value) %>%
select(ID, Date, c(6, 12, 9, 15, 3), c(6, 12, 9, 15, 3)+1, c(6, 12, 9, 15, 3)+2)
: 여기
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
실제로 큰 데이터 프레임에서 두 개의 다른 샘플을 게시했습니다. ID를 편집하여 샘플의 ID가 일치하도록했습니다. – FtD
은 data.tables dcast가있는 하나의 라이너처럼 보이지만 직접 데이터를 복사하는 것은 게을리니다. "data <- data.frame (x = 1 : 10, y = 11)"형식으로 재현 가능한 예제를 제공 할 수 있습니까? : 20) "이걸 확인하기 위해 붙여 넣기를 복사 할 수 있습니까? 또는 "data