2016-09-06 83 views
0

我是R初學者。我想使用包「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具有比數據幀更少的行(很明顯,因爲它是一個修整變量)。我怎樣才能做到這一點?

感謝您的耐心和幫助!

+0

爲了更好地明白:你是否想要在數據框中將修剪過的行「a」值設置爲NA,還是要刪除這些行? –

+0

不適用會很好 – 00schneider

+1

我投票結束這個問題,因爲它是關於如何使用R而沒有可重複的例子。 – gung

回答

2

Trim不適合你想要做的事情。它從矢量中移除極值,以便您可以將該矢量傳遞到像meansd之類的東西,以便可以計算這些數量而不受異常值的影響。

要將極值設置爲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%轉換成最低的10%,那麼這會改變最低10%的計算,因爲它們是以90%的值計算的。因此,我需要R來平行或解決。 – 00schneider

+1

是啊!好點!我會編輯 –

+0

非常感謝你! – 00schneider

0

反映這個帖子,我改變了功能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)

相關問題