gpt4 book ai didi

r - 如何以正确的格式从 R 的聚合函数中获取 data.frame?

转载 作者:行者123 更新时间:2023-12-03 18:33:10 25 4
gpt4 key购买 nike

我在获取 R 时遇到问题 aggregate()以我想要的格式返回 data.frame 的函数。

基本上我像这样运行聚合:

aggregate(df$res, list(full$depth), summary)

哪里 res列包含 TRUE , FALSENA .我想计算 res的每个值的次数根据 depth 中的组发生,它们是六个数字深度值 0、5、15、30、60 和 100。根据聚合函数的帮助页面,它将 by 值强制转换为因子,所以这应该不是问题(就我而言)告诉)。

所以我运行聚合函数并将其存储在 data.frame 中。这可以;它运行没有错误。 R 控制台中显示的摘要如下所示:
  Group.1  x.Mode x.FALSE x.TRUE x.NA's
1 0 logical 3 83 0
2 5 logical 3 83 0
3 15 logical 8 78 0
4 30 logical 5 79 2
5 60 logical 1 64 21
6 100 logical 1 24 61

同样,这很好,看起来像我想要的。但是包含结果的 data.frame 实际上只有两列,看起来像这样:
    Group.1 x
1 0 logical
2 5 logical
3 15 logical
4 30 logical
5 60 logical
6 100 logical
7 3
8 3
9 8
10 5
11 1
12 1
13 83
14 83
15 78
16 79
17 64
18 24
19 0
20 0
21 0
22 2
23 21
24 61

我从 aggregate()了解到帮助页面:

If the by has names, the non-empty times are used to label the columns in the results, with unnamed grouping variables being named Group.i for by[[i]].



这向我表明,如果 by有名称,那么输出 data.frame 看起来更像是打印到 R 控制台的摘要(即它有 5 列,包括 by 中每个级别的一列计数)而不是两列版本它实际上被保存为。问题是帮助页面根本没有解释什么是命名 by变量是,特别是如果它像我一样从 data.frame 列被强制转换为列表。

我需要做些什么不同的事情才能得到由 aggregate() 产生的 data.frame|为 by 的每个级别设置一列计数正如帮助所暗示的那样,如果我知道我在做什么,它可以吗?

最佳答案

这是因为 aggregate 的结果在这种情况下相当奇怪,最后一列实际上是一个有四列的矩阵,所以结果看起来像一个 5 列的数据框,但它实际上是一个 2 列的数据框,其中第二列是一个 4 宽的矩阵。这是将其转换为普通 data.frame 的解决方法:

X <- aggregate(sample(c(T, F, NA), 100, r=T), list(rep(letters[1:4], 25)), summary)
X <- cbind(X[-ncol(X)], X[[ncol(X)]])
str(X)
# 'data.frame': 4 obs. of 5 variables:
# $ Group.1: chr "a" "b" "c" "d"
# $ Mode : Factor w/ 1 level "logical": 1 1 1 1
# $ FALSE : Factor w/ 4 levels "10","4","6","8": 3 2 4 1
# $ TRUE : Factor w/ 2 levels "15","8": 2 1 2 2
# $ NA's : Factor w/ 4 levels "11","6","7","9": 1 2 4 3

结果的奇数是 summary 的函数返回 4 个长度的向量而不是单个值。

关于r - 如何以正确的格式从 R 的聚合函数中获取 data.frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21768735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com