Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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 聚合打印不正确的列数_R_Dataframe_Aggregate - Fatal编程技术网

R 聚合打印不正确的列数

R 聚合打印不正确的列数,r,dataframe,aggregate,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

我使用聚合函数按因子级别获取范围。我试图重命名这些列,但是聚合函数的输出没有将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))
数据结构:

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.1
x.1
(最小)和
x.2
(最大),但数据帧只有两列。我尝试了setNames、rename和name,但没有成功,因为我试图命名三列,而R只有两列

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

# 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))
然后,当您
print
它时,它会触发
print.data.frame
方法,该方法依次调用
format.data.frame
,该方法将矩阵列中的每一列转换为单独的列(请参见
str(format.data.frame(spcode\u范围))
,然后,打印的结果实际上不是您试图打印的实际
data.frame
(不要问我为什么,可能是为了方便-因为不清楚如何在
data.frame
中打印
矩阵

所以基本上,解决这个问题的一种方法是将
do.call
cbind.data.frame
结合起来,例如

res <- 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

res您可以使用:
名称(spcode\u范围)可能与我不能使用名称重复。下面是R在调用名称时给出的错误消息:名称错误(spcode\u范围)对不起,我太快按了enter键。来自聚合函数的dataframe只有2列。