聚合打印列数不正确

时间:2015-07-23 14:38:55

标签: r dataframe aggregate

我使用聚合函数来获得因子级别的范围。我正在尝试重命名列,但聚合函数的输出没有min和max作为单独的列。

# example data
size_cor <- data.frame(SpCode = rep(c(200, 400, 401), 3),
                       Length = c(45, 23, 56, 89, 52, 85, 56, 45, 78))

# aggregate function
spcode_range <- with(size_cor, aggregate(Length, list(SpCode), FUN = range))

输出:

spcode_range 

  Group.1 x.1 x.2
1     200  45  89
2     400  23  52
3     401  56  85

数据结构:

str(spcode_range)

'data.frame':   3 obs. of  2 variables:
 $ Group.1: num  200 400 401
 $ x      : num [1:3, 1:2] 45 23 56 89 52 85

dim(spcode_range)
[1] 3 2

输出有三列:Group.1x.1(分钟)和x.2(最大),但数据框只有2列。我已经尝试了setNames,重命名和名称没有成功,因为我试图在R只有2列时命名三列。

1 个答案:

答案 0 :(得分:1)

基本上,这里发生的是您按组调用了range函数,该函数一次返回了两个值。 aggregate函数返回了data.frame(除非数据集是ts类,否则它总是这样做),并且这些值作为matrix在单列(类{ {1}}显然。)

然后,当您matrix时,它会触发print方法,该方法依次调用print.data.frame,该方法会将矩阵列中的每一列转换为单独的列(请参见{{1} }),然后打印的结果实际上不是您要打印的实际format.data.frame(不要问我为什么,可能是为了方便起见-因为不清楚如何在其中打印str(format.data.frame(spcode_range)) data.frame)。

因此,基本上,解决此问题的一种方法是将matrixdata.frame结合起来,例如

do.call

或者仅使用cbind.data.frameres <- do.call(cbind.data.frame, aggregate(Length ~ SpCode, size_cor, range)) str(res) # 'data.frame': 3 obs. of 3 variables: # $ SpCode : num 200 400 401 # $ Length.1: num 45 23 56 # $ Length.2: num 89 52 85 之类的其他程序包,这些程序包旨在(除其他功能外)替换/改进R中的数据操作操作。