>source

study_ID <-c(5,6,7,8) 무작위화 < -as.POSIXlt(c("2021-01-01 11:00", "2021-01-02 10:00", "2021-01-03 10:00","2021-01-04 10:00" )) water_on < -as.POSIXlt(c("2021-01-01 13:00", "2021-01-02 09:00",NA,"2021-01-04 09:45")) water_off < -as.POSIXlt(c("2021-01-01 18:00", "2021-01-02 18:00",NA,"2021-01-04 11:00")) 시험_A < -data.frame(study_ID, randomization, water_on, water_off) 보기(trial_A)

데이터 프레임 시험_A에서 true_water_on이라는 새 열을 만들려고 합니다. 그것을 채우는 조건은 다음과 같습니다

  1. "water_on" 날짜 및 시간이 "randomisation"의 시간 및 날짜보다 앞선 경우 해당 행의 무작위 데이터 및 시간이 "true_water_on"으로 복사됩니다.

--이것은 study_ID 6 및 8에 대해 발생합니다. 에 의해 입증된 바와 같이
시험_A %>% 돌연변이(TD_ran_waterstart= water_on -무작위화, 단위="분")

  1. "water_on" 날짜 및 시간이 "randomization"의 시간 및 날짜 이후에 발생하면 해당 행에 대한 water_on 데이터가 "water_drug_on"에 복사됩니다.

  2. "water_on"에 기록된 데이터와 시간이 없으면 NA는 "true_water_on"으로 표시됩니다.

이 질문/방향을 해결하는 데 도움을 주셔서 감사합니다.

이것이 ifelse 또는 if_else의 직접적인 적용이 아닌 이유는 무엇입니까? 물론 제 생각에는 조금 더 노력해야 합니다.

IRTFM2022-02-14 12:27:14
  • 답변 # 1

    간단히 사용할 수 있습니다.최대.

    transform(trial_A, true_water_on=apply(trial_A[2:3], 1, max))
    #  study_ID       randomisation            water_on           water_off       true_water_on
    # 1        5 2021-01-01 11:00:00 2021-01-01 13:00:00 2021-01-01 18:00:00 2021-01-01 13:00:00
    # 2        6 2021-01-02 10:00:00 2021-01-02 09:00:00 2021-01-02 18:00:00 2021-01-02 10:00:00
    # 3        7 2021-01-03 10:00:00                <NA>                <NA>                <NA># 4        8 2021-01-04 10:00:00 2021-01-04 09:45:00 2021-01-04 11:00:00 2021-01-04 10:00:00
    

    건배. 매우 감사

    GJW2022-02-14 12:27:14
  • 답변 # 2

    @IRTFM이 제안하는 것처럼 이것은 다음의 간단한 응용 프로그램처럼 보입니다.다른 경우라면또는케이스_때~에dplyr.

    library(dplyr)
    trial_A %>%
      mutate(true_water_on= case_when(water_on < randomisation ~ randomisation,
                                       water_on > randomisation ~ water_on))
    #  study_ID       randomisation            water_on           water_off       true_water_on
    #1        5 2021-01-01 11:00:00 2021-01-01 13:00:00 2021-01-01 18:00:00 2021-01-01 13:00:00
    #2        6 2021-01-02 10:00:00 2021-01-02 09:00:00 2021-01-02 18:00:00 2021-01-02 10:00:00
    #3        7 2021-01-03 10:00:00                                                #4        8 2021-01-04 10:00:00 2021-01-04 09:45:00 2021-01-04 11:00:00 2021-01-04 10:00:00
    

    케이스_때조건이 일치하지 않으면 반환됩니다.없음기본적으로.

    당신의 답변에 감사드립니다. 문제 해결됨 :-)

    GJW2022-02-14 12:27:14
  • 이전 SQL Server 데이터베이스에 대한 프론트엔드를 생성하려면 어떻게 해야 합니까?
  • 다음 javascript : 관련 없는 code를 클릭하면 JS TypeError가 표시됨