2016-10-28 1 views
0

이 질문에 대한 답변은 웹 어디에서나 찾아야한다고 생각합니다.하지만 찾을 수는 없습니다. 설명하는 스레드/사이트를 찾으면 나에게 리디렉션하십시오.결과에서 길이가 다르더라도 적용에서 데이터 프레임을 반환하십시오.

내 문제 : 데이터 프레임의 각 행에 함수를 적용하고 데이터 프레임을 다시 가져오고 싶지만 적용 결과가 다양하므로 적용하면 목록이 제공됩니다.

예제 : 데이터 프레임에서 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 중 하나 (같은 이유로, 나는 가정) 작동하지 않습니다. 알프레드

답변

0

na.rm=FALSE으로 시도

:

> apply(df,1,function(x){na.approx(x,na.rm = F)}) 
    [,1] [,2] [,3] 
[1,] 1 2.0 NA 
[2,] 2 4.5 5 
[3,] NA 7.0 8 
+0

감사 로버트의 zoo package를 참조하십시오! 또한 Nishu Tayal이 Plyr 패키지에서 aaply를 사용하는 것과 관련하여 위의 대답에 대한 나의 질문을 참조하십시오. – adh2

1

사용 na.rm = FALSE. 또는 na.rm = F

apply(df,1,function(x){na.approx(x, na.rm=FALSE)}) 

자세한 내용

+0

다음과 같이 쓸 수 있습니다 :'apply (df, 1, na.approx, na.rm = FALSE) ' –

+0

Nishu Tayal과 @G. 그로 첸디 에크! 또한 왜 $ aaply (df, 1, .fun = function (x) {na.approx (x, na.rm = FALSE)}) $를 가진 plyr이 동일한 결과를 산출하지 못하는지 말할 수 있습니까? 오히려 그것은 나에게 4D 어레이를 제공한다 (나는 생각한다)? – adh2

관련 문제