2016-09-06 84 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)

相关问题