R用随机极值替换当前列(值),低于12.5%且高于87.5%

时间:2016-08-08 17:26:08

标签: r

我有一个包含10行(值)的数据集。数据例如:

value <- c(40.557669, 44.436873, 18.541628, 16.524613, 19.34,
       10.07, 17.33, 20.155240, 15.31, 101.23,
       )

data <- data.frame(value)

使用分位数我可以选择百分比25%,50%,75%之间的值。

例如:

data$value <- data$value[data$value>=quantile(data$value)[4]]
newvalue <- data$value[data$value>=quantile(data$value)[4]]
data$value <- sample(newvalue, dim(data)[1], replace=T)

我想用随机极值替换当前值,低于12.5%且高于87.5%。

如何做到最好?

谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了您提供的数据集的问题,所以让我们重复一遍。从data.frame开始,其中包含一列value,包含50个随机整数:

set.seed(4)
df <- data.frame(value = sample(1:100, 50))

获得12.5%和87.5%的ntiles:

ntiles <- quantile(df$value, probs = c(0.125, 0.875))
# ntiles
#  12.5%  87.5% 
# 19.625 85.500 

现在将data.frame分为下极端和上极端:

lowers <- subset(df, value < ntiles[1])
uppers <- subset(df, value > ntiles[2])

最后,来自lowers$valueuppers$value的组合小组的示例:

sample(c(lowers$value, uppers$value), NROW(df), replace = T)

我使用NROW(df)(将为50)从原始数据集中获取相同数量的记录。