여러 해에 걸친 기후 변수 (일별 값)의 데이터 세트에서 정보를 추출하려고합니다. 눈의 유무는 데이터 세트에서 1과 0으로 코딩됩니다. 각 라인은 하루에 해당하며 날짜와 반년 동안 컬럼 Cody가 있습니다. 각 반년기 동안 나는 눈의 존재가 마지막으로 나타난 후 날짜의 값을 찾으려고합니다 (1). 필자는 집계를 통해 변수를 그룹화하여이 작업을 시도했지만 "집계"는 이름이없는 데이터 프레임의 열을 전달하는 것처럼 보이기 때문에 사용자 지정 함수를 사용하지 못했습니다."집계"와 사용자 정의 함수의 결합
dates<-c("1993-01-01","1993-01-02","1993-01-03","1993-01-04","1993-01-05","1994-02-20","1994-02-21","1994-02-22","1994-02-23","1994-02-24")
df<-data.frame(Date=as.Date(dates,format = "%Y-%m-%d"),
halves=as.factor(c(1993-01-01,1993-01-01,1993-01-01,1993-01-01,1993-01-01,1994-01-01,1994-01-01,1994-01-01,1994-01-01,1994-01-01)),
plot1=c(1,1,1,0,0,1,1,0,0,0),
plot2=c(1,1,0,0,0,1,1,0,1,0),
plot3=c(0,1,1,1,0,1,1,1,0,0))
나는 루프를 사용하여 그 효율이 아니라는 것을 알고 있지만 나는 "하지 플롯 - 열"에 함수를 적용하지 않도록 할 때부터 사용하고 있습니다 :
for(plots in names(df)[- which(names(df) %in% c("Date","halves"))]){
meltday[[plots<-aggregate(df[[plots]]~halves,df,df$Date[last(which(snow.days.half$Date==0)) + 1])
}
이이 오류가 발생합니다 마지막 부분은 함수로 평가되지 않기 때문입니다. 그래서 집에서 만든 함수를 사용하여 모든 플롯 열에서 마지막 발생 일의 날짜 + 1을 찾습니다. 함수가 목록에 입력을 강제 변환하기 때문에
snowmelt<-function(x)
{snowmelt<-max(x[[Date]][x[[plots]]==1])
snowmelt}
그러나
for(plots in names(df)[- which(names(df) %in% c("Date","halves"))]){
meltday[[plots]]<-aggregate(df[[plots]] ~ halves,df,snowmelt)
}
시도는 오류 문으로 저를 떠났다.
그래서 나는 아주 꼼짝 못하고 올바른 방향으로 나를 가리키는 의견이나 대답에 대해 매우 감사하고 apprechiative하게 될 것입니다. 내 원하는 출력은의 날짜와 dataframe 될 것이다 :
>meltday
halves plot1 plot2 plot3
1993-01-04 1993-01-04 1993-01-03 1993-01-05
1994-01-01 1994-02-22 1994-02-24 1994-02-23
편집의 라인을 따라 : 명확한 설명을 위해 추가 원하는 출력.
감사합니다! tidyr
내가 너희를 입력 OP에서 halves
변수가 문자 벡터를 사용하는 방법을 변경
dplyr
를 사용
당신이 plyr, dplyr 또는 data.table에 대한 선호가 있습니까? 그것들은이 작업을 수행하는 데 도움이 될 수있는 세 가지 패키지입니다. – stephematician
나는이 문제에서 dplyr로 뭔가를 시도했지만 아무 것도 관리하지 않았다. - : df %> % group_by (halves) %> % mutate (Snow.Melt = Date [last (which (df [[ ]] == 0)) + 1])'- – Ronja
원하는 출력은 어떻게 보이나요? –