hen*_*dra 5 aggregate r dataframe
我在让R aggregate()
函数以我想要的格式返回data.frame时遇到麻烦。
基本上我像这样运行聚合:
aggregate(df$res, list(full$depth), summary)
Run Code Online (Sandbox Code Playgroud)
其中res
列包含TRUE
,FALSE
和NA
。我想res
根据中的组计算每个值的出现次数,这些组depth
是六个数字深度值0、5、15、30、60和100。根据聚合函数上的帮助页面,它会强制按值的因素,所以这应该不是问题(据我所知)。
因此,我运行了聚合函数并将其存储在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
Run Code Online (Sandbox Code Playgroud)
同样,这很好,看起来像我想要的。但是包含结果的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
Run Code Online (Sandbox Code Playgroud)
我从aggregate()
帮助页面了解到:
如果
by
有名称,非空的时间用来标记列在结果中,有不愿透露姓名的分组变量被命名Group.i
为by[[i]]
。
这向我暗示,如果by
具有名称,则输出data.frame看起来更像是打印到R控制台的摘要(即,它有5列,包括中每个级别的计数列by
),而不是它实际上是另存为两列版本。麻烦的是,帮助页面根本无法解释什么是命名by
变量,尤其是像我这种情况下,如果将其强制从data.frame列强制列出。
为了使data.frame aggregate()
的每个级别都有一列计数,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
Run Code Online (Sandbox Code Playgroud)
结果的奇数是summary
返回4个长度向量而不是单个值的函数。
归档时间: |
|
查看次数: |
3011 次 |
最近记录: |