0

我是 R 初学者。我想使用“DescTools”包的 Trim 函数来修剪变量。这适用于:

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 的行数少于数据框(显然,因为它是一个修剪变量)。我怎样才能做到这一点?

感谢您的耐心和帮助!

4

2 回答 2

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
于 2016-09-06T16:10:06.757 回答
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 起)

于 2016-11-06T15:47:52.740 回答