aggregate.data.frame中的错误:参数必须具有相同的长度

时间:2015-02-04 16:04:45

标签: r aggregate

我一直收到这个错误,我不太清楚这意味着什么。我的所有变量名都是一致的,没有拼写错误。我在这里错过了什么吗?

代码

datNewagg <- aggregate (dataNew, by = list('x', 'y', 'z', 'a', 'ab'), 
                                                             FUN = mean)  

产生错误

  Error in aggregate.data.frame(datNew, by = list("x", "y",  : 
  arguments must have same length

5 个答案:

答案 0 :(得分:9)

假设它不是拼写错误(数据框在您的通话中被称为dataNew但错误中为datNew),则为xyzaab dataNew中列的名称?

某些功能(如subset)允许您直接指定他们正在处理的对象的列名。 aggregate函数没有,因此dataNew参数中列出的任何by列都需要特别提及。试试这个:

datNewagg <- aggregate(dataNew,
    by = list(
        x = dataNew$x,
        y = dataNew$y,
        z = dataNew$z,
        a = dataNew$a,
        ab = dataNew$ab),
    FUN = mean) 

答案 1 :(得分:6)

我用过这个错误。
删除此错误的简单解决方案是将所有变量及其数据集名称写为“ds_name $ var_name” 我不确定你的情况是什么数据集名称,所以我会给你另一个类似的例子。

curYearRev <-aggregate(hr$Year.Total, by = list(hr$Hospital_ID,hr$District_ID,hr$Instrument_ID) , FUN = sum)

此处,“hr”是数据集名称,“Year.Total”,“Hospital_ID”,“District_ID”,“Instrument_ID”是“hr”数据集中的变量。

以这种方式编写聚合函数永远不会再给你任何错误。

答案 2 :(得分:1)

检查class(dataNew)。如果它不是data.frame,则聚合之前的dataNew <- data.frame(dataNew)应解决错误或

datNewagg <- aggregate (data.frame(dataNew), by = list('x', 'y', 'z', 'a', 'ab'), 
                                                         FUN = mean)

答案 3 :(得分:1)

使用with(...,aggregate(...))时,请勿将列名放在引号中。

答案 4 :(得分:0)

使用myapp.controller('LoginController', ['$scope', function(scope) { var that = this; // reference to the correct this context // Users for test this.users = [ { name: 'admin', password: 'admin', role: 'ADMIN' }, { name: 'employee', password: '12345', role: 'EMPLOYEE' } ]; console.dir(this.users); // Prints an array of objects correctly // called when user submits scope.login = function() { console.log('login(). User: '); console.dir(scope.user); // Prints the object with user's input (also correct) var found = false; for(let u of that.users) { // use the correct context here console.log('Comparing with:'); console.dir(u); if(u.name == scope.user.name && u.password == scope.user.password) { console.log('Found!'); found = true; // do something else... } } if(!found) { // show error message... } } }]); 作为data.frame参数对我有用 试试这个:

by

我的意思是不要给出datNewagg <- aggregate (dataNew, by = dataNew[c('x', 'y', 'z', 'a', 'ab')], FUN = mean) 参数,只是参数的名称,给出一个带有列作为这些参数的data.frame