>

조건에 따라 날짜 열에서 연도를 늘리고 싶습니다. StartDate가 EndDate보다 늦은 경우 EndDate에서 연도를 늘리십시오 (예 :

).
input_df:
  C1 C2  StartDate    EndDate
1  A  B 12/23/2019 01/07/2019
2  C  D 12/24/2019 12/30/2019
3  E  F 12/28/2019 12/30/2019
4  G  H 01/01/2019 04/18/2019
5  I  J 05/15/2019 05/25/2019

예상 출력 : input_df :

 C1 C2  StartDate    EndDate
1  A  B 12/23/2019 01/07/2020
2  C  D 12/24/2019 12/25/2019
3  E  F 12/28/2019 12/31/2019
4  G  H 01/01/2019 04/11/2019
5  I  J 05/15/2019 05/18/2019

이를 달성하기 위해 다음을 시도했습니다 :

input_df$EndDate[input_df$EndDate < input_df$StartDate] <- mdy(input_df$EndDate) + years(1)

그러나 내가받은 결과는 다음과 같습니다.

 C1 C2  StartDate    EndDate
1  A  B 12/23/2019      18268
2  C  D 12/24/2019 12/25/2019
3  E  F 12/28/2019 12/31/2019
4  G  H 01/01/2019 04/11/2019
5  I  J 05/15/2019 05/18/2019

'교체 할 품목 수는 교체 길이의 배수가 아닙니다'라는 경고와 함께

데이터 :

input_df <- structure(list(C1 = c("A", "C", "E", "G", "I"), C2 = c("B", "D", "F", "H", "J"), 
                           StartDate = c("12/23/2019", "12/24/2019", "12/28/2019", "01/01/2019", "05/15/2019"), EndDate = c("01/07/2019", "12/25/2019", "12/31/2019", "04/11/2019", "05/18/2019")), class = "data.frame", row.names = c(NA, -5L))

  • 답변 # 1

    왼쪽 만 부분 집합하기 때문에 오류가 발생한다고 생각합니다. 또한, 당신은 아마 StartDate 에 대해 동일한 클래스로 작업하고 싶을 것입니다  그리고 EndDate . 이것을 시도하십시오 :

    input_df$StartDate <- mdy(input_df$StartDate)
    input_df$EndDate <- mdy(input_df$EndDate)
    input_df$EndDate[input_df$EndDate < input_df$StartDate] <- 
      input_df$EndDate[input_df$EndDate < input_df$StartDate] + years(1)
    input_df
    
    

  • 답변 # 2

    tidyverse 사용  패키지 :

    input_df %>% mutate(StartDate = as.Date(StartDate, format = "%m/%d/%Y"), 
    EndDate = as.Date(EndDate, format = "%m/%d/%Y"), 
    EndDate_N = if_else(StartDate >= EndDate, StartDate + years(1), StartDate))
    
    

  • 이전 c# - Excel Dna Excel 리본에서 UDF 매개 변수 읽기
  • 다음 PHP 배열 키와 내부 값 정렬