Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:在data.frame中存储boxplot.stats的有效方法_R_For Loop_Apply - Fatal编程技术网

R:在data.frame中存储boxplot.stats的有效方法

R:在data.frame中存储boxplot.stats的有效方法,r,for-loop,apply,R,For Loop,Apply,我在R工作,我有143个变量的数据和大约50000个观察值。数据被存储为data.frame称为TR。对于每个变量,我想将boxplot.stats的结果存储在一个公共data.frame中,这被称为离群值 我的第一次尝试是一个for-循环,但我想还有更有效的方法 for (n in 1:143) {Outlier[n] <- cbind(boxplot.stats(TR[,n]))} 等等,直到[[143]] 我想要的是一个数据帧,其中的列名与原始数据集的列名相同(因此变量“

我在R工作,我有143个变量的数据和大约50000个观察值。数据被存储为
data.frame
称为TR。对于每个变量,我想将
boxplot.stats
的结果存储在一个公共
data.frame
中,这被称为离群值

我的第一次尝试是一个
for
-循环,但我想还有更有效的方法

    for (n in 1:143) {Outlier[n] <- cbind(boxplot.stats(TR[,n]))} 
等等,直到[[143]]

我想要的是一个数据帧,其中的列名与原始数据集的列名相同(因此变量“age”的摘要将再次称为“age”,而不是[111])

我想某种形式的
apply
-函数应该适合我

谢谢你的帮助


编辑(编辑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

如果只想保留第一个元素(“stats”),可以执行以下操作:

 do.call("cbind", lapply(TR, function(x) boxplot.stats(x)$stats))
示例:

TR<-data.frame(matrix(rnorm(1000, 0, 1), nrow=100))
colnames(TR) <- paste0("var", 1:10)

result <- do.call("cbind",lapply(TR,function(x) boxplot.stats(x)$stats))
row.names(result) <- c("lower whisker", "lower hinge", "median", "upper hinge", "upper whisker")

> result
#                        var1       var2        var3       var4        var5        var6       var7       var8       var9       var10
# lower whisker  -2.576439995 -2.2792196 -2.35167507 -1.8877539 -2.58913827 -2.16186578 -2.2256634 -2.6224338 -2.6553318 -2.20051934
# lower hinge    -0.702412927 -0.8807600 -0.51379104 -0.8844453 -0.70669242 -0.67969000 -0.4659781 -0.9299630 -0.6832023 -0.75777439
# median         -0.001227173 -0.1061840  0.05179841 -0.1814486  0.07202305 -0.05771931  0.1607952 -0.1093029  0.1497963  0.02718001
# upper hinge     0.713235646  0.6534857  0.86043753  0.5778967  0.60288720  0.35219547  0.7317339  0.5787307  0.7458351  0.78165452
# upper whisker   2.596567487  2.2561072  2.66626361  1.7087384  2.24049360  1.81568251  1.9378385  2.5409711  2.3770803  3.01762144    

TR如果只想保留第一个元素(“stats”),可以执行以下操作:

 do.call("cbind", lapply(TR, function(x) boxplot.stats(x)$stats))
示例:

TR<-data.frame(matrix(rnorm(1000, 0, 1), nrow=100))
colnames(TR) <- paste0("var", 1:10)

result <- do.call("cbind",lapply(TR,function(x) boxplot.stats(x)$stats))
row.names(result) <- c("lower whisker", "lower hinge", "median", "upper hinge", "upper whisker")

> result
#                        var1       var2        var3       var4        var5        var6       var7       var8       var9       var10
# lower whisker  -2.576439995 -2.2792196 -2.35167507 -1.8877539 -2.58913827 -2.16186578 -2.2256634 -2.6224338 -2.6553318 -2.20051934
# lower hinge    -0.702412927 -0.8807600 -0.51379104 -0.8844453 -0.70669242 -0.67969000 -0.4659781 -0.9299630 -0.6832023 -0.75777439
# median         -0.001227173 -0.1061840  0.05179841 -0.1814486  0.07202305 -0.05771931  0.1607952 -0.1093029  0.1497963  0.02718001
# upper hinge     0.713235646  0.6534857  0.86043753  0.5778967  0.60288720  0.35219547  0.7317339  0.5787307  0.7458351  0.78165452
# upper whisker   2.596567487  2.2561072  2.66626361  1.7087384  2.24049360  1.81568251  1.9378385  2.5409711  2.3770803  3.01762144    

TR您可以尝试
lappy(TR,boxplot.stats)
,您希望保留哪些统计信息?如果您只想保留第一个元素,您可以这样做:
do.call(“cbind”,lappy(TR,function(x)boxplot.stats(x)$stats))
@CathG,我想保留所有5个值。
boxplot.stats
的结果中有4个元素:
stats
=5个“键”值,
n
=非NA观察值的数量,
conf
=CI”和
out
=异常值。如果你只是对5个关键值感兴趣(下胡须的极值、下“铰链”、中间值、上“铰链”和上胡须的极值),你可以使用我发布的答案中的方法。(您可以通过名为“var1”到“var10”的10个变量的示例了解它的工作原理)jep-很抱歉这个糟糕的公式。这正是我的意思。它工作得非常好,而且还正确地为我提供了
colname
。所以诀窍是使用
lappy
而不是
for
,并指定
boxplot$stats
而不是
boxplot
。我的下一个任务是阅读
do.call
-function。您可以尝试
lappy(TR,boxplot.stats)
,您想保留哪些统计信息?如果您只想保留第一个元素,可以执行:
do.call(“cbind”,lappy(TR,function(x)boxplot.stats(x)$stats))
@CathG,我想保留所有5个值。
箱线图的结果中有4个元素。stats
stats
=5个“关键”值,
n
=非NA观测值的数量,
conf
=CI”和
out
=异常值。如果您对这5个关键值感兴趣(下须的极端、下‘铰链’、中间、上‘铰链’和上须的极端),您可以使用我发布的答案中的方法。(您可以看到它是如何与从“var1”到“var10”的10个变量示例一起工作的)jep-很抱歉这个糟糕的公式。这正是我的意思。它工作得非常好,而且还正确地为我提供了
colname
。所以诀窍是使用
lappy
而不是
for
,并指定
boxplot$stats
而不是
boxplot
。我的下一个任务是阅读
do.call-函数。仔细查看我得到的结果实际上表明,这不是我想要的。相反,它为我提供了位于下须、下“铰链”、中间、上“铰链”和上须末端的条目值,通过ID:(取而代之的是,我要计算每个变量的数字。@PikkuKatja,首先,我真的很抱歉我把row.names放得太快了,复制/粘贴了您在问题中输入的内容(最小,25%…),但实际上这与
boxplot.stats
:-()(这是我在之前的评论中所做的…)所以这是正确的,但再一次,对不起。关于你的评论,我真的不明白,因为计算出来的实际上是每个变量的不同统计数据…你能用你的输入数据编辑你的问题吗。框架和期望的输出?嘿@CathG,我自己发现了关于胡须的问题,我在上一次编辑中更正了它。事实上,甚至虽然这不是我想要的数字,但它们仍然被证明是有用的。嗯,如果,如你所说,每个列的统计数据都是分别计算出来的,我想我需要做的是仔细查看我的数据,看看我得到的奇怪结果来自何方。如果我还真的有编程问题的话(不仅仅是数据格式错误的问题),我会给你回复:-)感谢您的帮助!仔细查看我得到的结果实际上表明,这不是我要查找的。相反,它为我提供了位于下胡须、下“铰链”、中间、上“铰链”和上胡须末端的条目的值,通过ID:(取而代之的是,我要计算每个变量的数字。@PikkuKatja,首先,我真的很抱歉我把row.names放得太快了,复制/粘贴了您在问题中输入的内容(最小,25%…),但实际上这与
boxplot.stats
:-()(这是我在之前的评论中所做的…)这是正确的,但再次抱歉。关于你的评论,我不太理解,因为计算出来的实际上是每个变量的不同统计数据…你能用你的输入数据编辑你的问题吗。frame和desired out