【问题标题】:r split-apply-combine problemsr 拆分应用组合问题
【发布时间】:2021-01-28 19:36:09
【问题描述】:

我是 r 的新手并且有一个很大的 data.frame(906 行),我想(行?)在我之前将 data.frame 按第一列(与相同名称关联的条目放在一起)拆分将多个描述性统计数据(平均值、标准差、标准误差/方差、25% 和 75% 置信区间、最小值、最大值和中位数)应用于其余列。与每个物种相关的行数不一样,因此是不均匀/不平衡的拆分。有很多 na 分散在“par”列中(每一行至少有 1 个列条目)但我只想忽略/跳过 na 不删除/省略行。Heres a picture of my initial data.frame -column names are not the actual column names I'm using

我希望我的最终输出显示:名称列、描述性统计列和描述性统计结果列(每个部分一列)。I've included a picture of what I want the table output to look like, if it's possible (values in par columns aren't actually the calculated stats I just put random stuff in to fill the frame)我尝试过的所有内容到目前为止,还没有奏效。同样,也很新,我不确定我在做什么,请帮忙。

【问题讨论】:

  • 欢迎来到 SO(和 R)。您能否阅读How to make a great R reproducible example 并相应地修改您的问题。包括一个最小的、可复制和粘贴的示例,根据示例显示预期输出,理想情况下是您的编码尝试。这将使其他人更容易帮助您。
  • 发布您的数据!不是指向数据图像的链接,而是在此处以文本形式发布。

标签: r na split-apply-combine


【解决方案1】:

通常,您可以通过查看 R 附带的内容(data() 将显示数据集列表和简要说明)为您的可重现示例找到合适的数据。例如,iris 数据集与您的数据集相似,只是物种名称是最后一列:

data(iris)
iris <- iris[, c(5, 1:4)]
iris.splt <- split(iris[, 2:5], iris[, 1])

现在我们已经加载了数据,将最后一列移到了第一个位置,并将数据集按物种拆分为 3 个数据框,这些数据框存储在一个名为 iris.splt 的列表中。 物种名称是列表每个部分的名称,只有数据存储在该列表部分的数据框中。现在你需要编写一个函数来计算你需要的统计数据。这是基于您提供的图片的示例,但您可能需要更改它:

stats <- function(x) {
    quant=as.matrix(quantile(x, na.rm=TRUE))
    mean=mean(x, na.rm=TRUE)
    sd=sd(x, na.rm=TRUE)
    var=var(x, na.rm=TRUE)
    return(rbind(quant, mean, sd, var))
}

这会计算单个列的统计信息。我们需要使用 lapply 函数在列表的每一部分的每一列上运行该函数两次,然后第三次将这些列重新组合在一起:

iris.stats <- lapply(iris.splt, function(x) lapply(x, stats))
iris.dfs <- lapply(iris.stats, data.frame)
iris.dfs
# $setosa
#      Sepal.Length Sepal.Width Petal.Length Petal.Width
# 0%         4.3000      2.3000      1.00000     0.10000
# 25%        4.8000      3.2000      1.40000     0.20000
# 50%        5.0000      3.4000      1.50000     0.20000
# 75%        5.2000      3.6750      1.57500     0.30000
# 100%       5.8000      4.4000      1.90000     0.60000
# mean       5.0060      3.4280      1.46200     0.24600
# sd         0.3525      0.3791      0.17366     0.10539
# var        0.1242      0.1437      0.03016     0.01111
# 
# $versicolor
#      Sepal.Length Sepal.Width Petal.Length Petal.Width
# 0%         4.9000     2.00000       3.0000     1.00000
# 25%        5.6000     2.52500       4.0000     1.20000
# 50%        5.9000     2.80000       4.3500     1.30000
# 75%        6.3000     3.00000       4.6000     1.50000
# 100%       7.0000     3.40000       5.1000     1.80000
# mean       5.9360     2.77000       4.2600     1.32600
# sd         0.5162     0.31380       0.4699     0.19775
# var        0.2664     0.09847       0.2208     0.03911
# 
# $virginica
#      Sepal.Length Sepal.Width Petal.Length Petal.Width
# 0%         4.9000      2.2000       4.5000     1.40000
# 25%        6.2250      2.8000       5.1000     1.80000
# 50%        6.5000      3.0000       5.5500     2.00000
# 75%        6.9000      3.1750       5.8750     2.30000
# 100%       7.9000      3.8000       6.9000     2.50000
# mean       6.5880      2.9740       5.5520     2.02600
# sd         0.6359      0.3225       0.5519     0.27465
# var        0.4043      0.1040       0.3046     0.07543

您必须决定如何使用此列表,或者是否要将其组合回单个数据框,但这应该可以帮助您开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多