이 질문에 대한 답변은 웹 어디에서나 찾아야한다고 생각합니다.하지만 찾을 수는 없습니다. 설명하는 스레드/사이트를 찾으면 나에게 리디렉션하십시오.결과에서 길이가 다르더라도 적용에서 데이터 프레임을 반환하십시오.
내 문제 : 데이터 프레임의 각 행에 함수를 적용하고 데이터 프레임을 다시 가져오고 싶지만 적용 결과가 다양하므로 적용하면 목록이 제공됩니다.
예제 : 데이터 프레임에서 NAs를 행 방향으로 보간해야합니다. 동물원의 na.approx는 쉽게 열 단위로 삽입 할 수 있지만 행렬로 처리하려고합니다. 2, 7,하지 2, 5의 평균 그래서 나는이 작업을 수행 할 수 있습니다 :
> df <- data.frame(C1=c(1,2,NA),C2=c(2,NA,5),C3=c(NA,7,8))
> na.approx(df)
C1 C2 C3
[1,] 1 2.0 NA
[2,] 2 3.5 7
[3,] NA 5.0 8
나는 4.5로 중간에 3.5을 원하는
> t(na.approx(t(df)))
[,1] [,2] [,3]
[1,] 1 2.0 NA
[2,] 2 4.5 7
[3,] NA 5.0 8
을 그리고는 OK,하지만 순서 적용 및 plyr을 배우기 위해 나는 이것들과 같은 결과를 얻고 싶습니다. 결과가 아니다 그러나 내가 원하는 :
> apply(df,1,function(x){na.approx(x)})
[[1]]
[1] 1 2
[[2]]
[1] 2.0 4.5 7.0
[[3]]
[1] 5 8
나는 처음과 마지막 행의 NA없이 data.frame이 있다면 그것은 .. 나에게 목록을 제공하고 그것을 잘 작동합니다 :
> df.2 <- data.frame(C1=c(1,2,3),C2=c(2,NA,5),C3=c(4,7,8))
> apply(df.2,1,function(x){na.approx(x)})
[,1] [,2] [,3]
[1,] 1 2.0 3
[2,] 2 4.5 5
[3,] 4 7.0 8
이것은 예상되는 것입니다. 적용 문서에 다음과 같이 표시됩니다. "FUN을 호출하면 길이가 다른 벡터를 반환하면 apply가 MARGIN으로 희미하게 설정된 길이가 긴 목록 (dim (X) [MARGIN])을 반환합니다. 이 길이가 1보다 큰 경우. "
하지만 데이터 프레임이 실제로 필요한 경우 어떻게해야합니까? 나는
> aaply(df,1,function(x){na.approx(x)})
Error: Results must have the same dimensions.
감사합니다 plyr를 배우고 싶은, 그래서하지만 aaply 중 하나 (같은 이유로, 나는 가정) 작동하지 않습니다. 알프레드
감사 로버트의 zoo package를 참조하십시오! 또한 Nishu Tayal이 Plyr 패키지에서 aaply를 사용하는 것과 관련하여 위의 대답에 대한 나의 질문을 참조하십시오. – adh2