我是R.的新手。我想做一个卡方异常值测试,在变量x$indel
上使用异常值库,直到返回p.value is > 0.01
(从数据中删除异常值之后)。
这是我试过的:
while(chisq.out.test(x$indel)$p.value < 0.01)
{
# str: string contains the outlier value and some text
# n: extract the outlier value and transform to numeric
str <- chisq.out.test(x$indel)$alternative
print(str)
n <- as.numeric(unlist(regmatches(str,
gregexpr("[[:digit:]]+\\.*[[:digit:]]*",str))))
x <- x[x$indel < n,]
print(nrow(x))
}
下面是x $ indel列
c(0.287749287749, 0.324786324786, 0.330484330484, 0.293447293447,
0.293447293447, 0.31339031339, 0.31339031339, 0.327635327635,
0.344729344729, 0.327635327635, 0.304843304843, 0.296296296296,
0.433048433048, 0.700854700855, 0.467236467236, 0.31339031339,
0.373219373219, 0.293447293447, 0.304843304843, 0.293447293447,
0.407407407407, 0.301994301994, 0.307692307692, 0.301994301994,
0.381766381766, 0.307692307692)
当我将此命令粘贴到控制台时,没有任何反应,出了什么问题?
答案 0 :(得分:2)
使用“异常值”生成一些数据
x = round(rnorm(100, 100, 100), 2)
用x$indel
替换所有x
。使用data.frame的问题是,当您从列中删除值并尝试替换原始列表时,您会收到有关维度不匹配的投诉。
还改进了正则表达式以处理负数,并改进了子集逻辑以处理“最高值”和“最低值”的情况。
while(chisq.out.test(x)$p.value < 0.01)
{
# str: string contains the outlier value and some text
# n: extract the outlier value and transform to numeric
str <- chisq.out.test(x)$alternative
print(str)
n <- as.numeric(unlist(regmatches(str,
gregexpr("(?<=value)(.*)(?=is an outlier)", str, perl = T))))
x <- x[x != n]
print(length(x))
}