내 첫 번째 질문은 여기 :) 내가 잘못하고있는 것일 수도있는 사전에 사과!여러 열을 기반으로 한 검색 r
나는이처럼 보이는 dataframe이 (물론이 방법이 더 크다) :
> df1
# A tibble: 10 x 4
index1 index2 date1 date2
<int> <int> <date> <date>
1 5800032 6 2012-07-02 2013-09-18
2 5800032 7 2013-09-18 1970-01-01
3 5800254 6 2013-01-04 1970-01-01
4 5800261 5 2012-01-23 2013-02-11
5 5800261 6 2013-02-11 2014-02-05
6 5800261 7 2014-02-05 1970-01-01
7 3002704 7 2012-01-23 1970-01-01
8 3002728 7 2012-10-20 1970-01-01
9 3002810 7 2012-07-18 1970-01-01
10 8504593 3 2012-01-11 1970-01-01
원래의 변수는 다음과 같습니다로부터 index1, index2 및 날짜 1. 같은 index1 값을 갖는 레코드가 하나 이상 있습니다 (시퀀스는 index2에 의해 결정됩니다). 내 목표는 index1의 동일한 값에 대한 date1의 결과 값 사이의 간격을 필터링하는 것입니다. 즉, 간격을 만들 때 index1 값이 같은 레코드가 두 개 이상 있어야합니다. 그래서 date1에서 시작하는 간격의 종료 날짜를 제공하는 date2 변수를 만들었습니다. 이것은 결과 레코드의 date1과 간단하게 같습니다 (date2 [n] = date1 [n + 1]). 주어진 index1 값에 대해 date1 [n]이 가장 최근의 날짜 일 경우, date2 [n] < -
df를 index1로 정렬하는 것보다 더 좋은 아이디어를 얻을 수 없었습니다. index2 및 루프를 실행 :
for (i in 1:(nrow(df1)-1)){
if (df1$index1[i] == df1$index1[i+1]){
df1$date2[i] <- df1$date1[i+1]
}
else{df1$date2[i] <- 0}
}
그것은 종류의 일을하지만 눈에 띄게 느린이었고, 어떤 이유로 그것은이 있어야 모든 값을 "발견"하지 않았다. 또한,이 작업을 수행하는 훨씬 지능적인 방법이 있어야합니다. 가능하면 sapply 기능이 있어야합니다. 모든 아이디어를 높이 평가합니다!
무엇을 하려는지 확실하지 않지만 'dplyr'을 사용하면 그룹 및 필터에 도움이됩니다. . 예를 들어,'require (dplyr); df1 %> % group_by (index1) %> % arrange (index2)'는 색인을 함께 그룹화하고 index2에 의해 각 그룹 내에 정렬합니다. 더 많이하기 전에 내가 원하는 것을 더 잘 이해할 필요가 있습니다. – ssp3nc3r
감사합니다. 설명하려고 : 내가 date1 열에 날짜 지점의 목록을 가지고 있지만 내가 필요한 건 동일한 index1 값에 대해 이러한 날짜 지점 사이의 간격을 정의하는 것입니다, 그래서 나는 data2 열에 간격의 끝 날짜를 추가해야합니다. . 첫 번째 간격은 date1 [min]과 date1 [min + 1] 사이이며 두 번째 간격은 date1 [min + 1]과 date1 [min + 2] 사이에 있습니다. date1 [n]에서 시작하는 간격의 종료 날짜는 date2 [n]이며 date1 [n + 1]과 같습니다. 주어진 index1 값에 대해 하나의 레코드 만있는 경우 간격에 두 개의 날짜 지점이 필요하기 때문에 date2 = 0입니다. 데이터 1 [최대]와 동일합니다. – AadiR
실제로 0을 표시하려면 데이터 프레임의 각 열이 같은 유형이어야하므로'date1'을 문자와 같은 것으로 변환해야합니다 :'df1 %> % group_by (index1) %> % % mutate (date1 = as.character (date1)) %> % mutate (date2 = 지연 (날짜 1, 기본값 = "0"))'실제 0을 지정하십시오. – ssp3nc3r