【发布时间】:2015-03-05 15:14:05
【问题描述】:
我在 R 中工作,我有来自 143 个变量和大约 50000 个观察值的数据。数据存储为data.frame,称为TR。对于每个变量,我想将boxplot.stats 的结果存储在一个常见的data.frame 中,称为异常值。
我的第一次尝试是for-loop,但我想还有更有效的方法...
for (n in 1:143) {Outlier[n] <- cbind(boxplot.stats(TR[,n]))}
这行得通,但它很慢而且不漂亮。由于某种原因,它也不允许我设置colnames。
到目前为止我的输出是:
print(Outlier)
[[1]]
[1] -5.86250 33.30000 48.19875 71.00750 127.53750
[[2]]
[1] 0.00 150.75 357.25 706.75 1540.75
[[3]]
[1] -11.2900 30.0000 44.9900 59.9900 104.9725
以此类推,直到 [[143]]
我想要的是一个数据框,其中列名与原始数据集的列名相同(因此变量“age”的摘要将再次称为“age”而不是 [111] )。
我想某种形式的 apply-function 应该对我有用!?
感谢您的帮助!
编辑(编辑 2 次)
我想获得一个数据框,在其中计算每个变量(例如列)的相应统计信息。之前提出的解决方案反而给了我由于第一列(customer_ID)而位于相应胡须位置的条目的值。 (这也让我想到我应该删除 customer_ID,因为它的统计数据完全不相关,当然......)
我想要的是:
customer_ID age ...
lower whisker 1 4
lower ‘hinge’ 18
median 25000 45
upper ‘hinge’ 60
upper whisker 500000 89
【问题讨论】:
-
你可以试试
lapply(TR,boxplot.stats),你想保留什么数据?如果你只想保留第一个元素,你可以这样做:do.call("cbind",lapply(TR,function(x) boxplot.stats(x)$stats)) -
@CathG,我想保留所有 5 个值。
-
boxplot.stats的结果中有 4 个元素:stats= 5 个“关键”值,n= 非 NA 观察的数量,conf=“CI " 和out= 异常值。如果您只对 5 个关键值(下胡须的极值、下“铰链”、中值、上“铰链”和上胡须的极值)感兴趣,您可以使用我发布的答案中的方法。 (您可以通过从“var1”到“var10”命名的 10 个变量的示例来了解它是如何工作的) -
jep - 抱歉表述不当。这正是我的意思。它工作得很好,也让我正确地得到了
colnames。所以诀窍是使用lapply而不是for并指定boxplot$stats而不是仅仅boxplot。我的下一个任务是阅读do.call-function。