使用R基于已知的不规则关系对行进行平均

时间:2015-12-31 22:51:16

标签: r

我有关于管辖权重叠的能源公司的数据。我希望能够计算这些公司重叠的地方的平均销售额。这些公司将始终重叠 - 那么我如何使用这些信息来计算这些公司的平均值?大约有20对公司。

module.exports = function(grunt) {

  grunt.initConfig({
    ...
  })

  grunt.registerTask('sample-task', function() {
    var test = grunt.file.readJSON('./test.json');

    if (test.fruit === 'apple') {
      // do this one thing
    } else {
      // do something else
    }

  });

  grunt.registerTask('default', ['sample-task']);
};

3 个答案:

答案 0 :(得分:1)

我们使用' grep'获得'公司'的索引具有多个条目的元素,即由' /'分隔。然后,通过分隔符(输出将是list)拆分这些元素,使用list循环遍历sapply,使用'公司&#循环match元素39;列获取位置,用它来获得相应的'销售'元素。作为'销售'列为factor,我们需要将其转换为numeric才能获得mean。当我们将factor转换为numeric类时,所有非数字元素(?)都将转换为NA。将这些NA元素替换为mean值。

i1 <- grepl('/', data$Company)
v1 <- sapply(strsplit(as.character(data$Company[i1]), '/'), 
    function(x) mean(as.numeric(as.character(data$Sales[match(x,
                    data$Company)]))))
data$Sales <- as.numeric(as.character(data$Sales))
data$Sales[is.na(data$Sales)] <- v1
data
#                 Company Sales
#1             Energy USA   100
#2            Good Energy  2500
#3         Hydropower 4 U   550
#4              Coal Town  6000
#5 Energy USA/Good Energy  1300
#6  Good Energy/Coal Town  4250

答案 1 :(得分:0)

在不知道您的原始数据如何的情况下,很难给出有效的答案。但是,假设您的数据的公司和销售列包含每个公司的多行,您可以执行以下操作:

mean(data$Sales[data$Company %in% c('Energy USA', 'Good Energy')]])
mean(data$Sales[data$Company %in% c('Good Energy', 'Coal Town')]])

答案 2 :(得分:0)

如果你的数据集相当小,你可以在“数据”中创建一个新的“管辖区”列。

MeansByJurisdiction <- tapply(data$sales, data$jurisdiction, mean)

然后你可以将矢量转换为dataframe

MeansByJurisdiction <- data.frame(MeansByJurisdiction)

MeansByJurisdiction数据框中的rownames将填充管辖区,您可以使用一行简单的代码提取它们:

MeansByJurisdiction$jurisdictions <- row.names(MeansByJurisdiction)