2016-09-06 2 views
0

저는 초보자입니다. "DescTools"패키지의 다듬기 기능을 사용하여 변수를 자르고 싶습니다. 이게 잘 작동합니다 :R : 변수를 자르고 데이터 프레임에 추가하기

mydata <- data.frame(
a <- rnorm(40, mean = 0, sd = 1) 
) 
a_trim <- Trim(mydata$a, trim = 0.2, na.rm = TRUE) 

이것은 객체를 생성하지만 데이터 프레임 mydata에 추가하고 싶습니다. 내가

mydata$a_trim <- Trim(mydata$a, trim = 0.2, na.rm = TRUE) 

R하여이 작업을 수행 할 때 다음 mydata의 $의 a_trim이 dataframe보다 적은 수의 행이 있기 때문에 (분명히을가 트리밍 된 변수이기 때문에,) 나에게 오류를 제공합니다. 어떻게해야합니까?

양해 해 주셔서 감사합니다.

+0

더 나은 사람 : 이제 , 당신은 여전히 ​​당신이 뭔가를 할 수 있습니다, 당신은 단순히 요소가 손질 할 레이블을 지정할 그러나 경우, 다시 손질 벡터를 얻을 것이다 이해 : 데이터 프레임에서 트림 된 행의 'a'값을 NA로 설정 하시겠습니까, 아니면 해당 행을 제거 하시겠습니까? –

+0

NA는 괜찮을 것입니다. – 00schneider

+1

재현 가능한 예제없이 R을 사용하는 방법에 관한 문제이기 때문에이 질문을 주제로 끝내기로했습니다. – gung

답변

2

Trim은 원하는 작업에 적합하지 않습니다. mean 또는 sd과 같은 벡터에 벡터를 전달할 수 있도록 벡터에서 극한 값을으로 제거하므로 해당 값을 이상 치의 영향없이 계산할 수 있습니다.

극한 값을 NA로 설정하려면 quantile을 사용할 수 있습니다. 이 포스트를 반영

upper_quantile <- quantile(mydata$a, 0.9) 
lower_quantile <- quantile(mydata$a, 0.1) 

# col a  where a > its 90th percentile becomes NA 
mydata$a[mydata$a > upper_quantile] <- NA 
mydata$a[mydata$a < lower_quantile] <- NA 
+1

안녕하세요, 대단히 감사합니다. 나를 귀찮게하는 한 가지 : 상위 10 %를 NA로 변환 한 후 가장 낮은 10 %가 업데이트 된 변수에서 계산됩니다. 맞습니까? 즉 적어도 상위 10 %를 변환하면 90 %의 값으로 계산되기 때문에 최저 10 %의 계산이 변경된다는 것을 의미합니다. 따라서 나는 그것을 평행하게 또는 주변에서 일해야한다. – 00schneider

+1

예! 큰 포인트! 나는 편집 할 것이다 –

+0

당신에게 많이 고마워요! – 00schneider

0

I는 속성 "trim" 같이 트리밍 원소의 인덱스를 반환하는 함수 Trim을 바꿨다.

a <- rnorm(40, mean = 0, sd = 1) 
a_trim <- Trim(mydata$a, trim = 0.2, na.rm = TRUE) 
data.frame(x=a, 
      trim=is.element(seq_len(length(a), attr(a_trim, "trim"))) 

(이후 DescTools 0.99.18)

관련 문제