R:按每个变量卷起并计算总数

时间:2016-03-18 06:51:27

标签: r

我有一个与此类似的数据集,大约有80个变量(标志)和80,000行

   $coordinateData = $this->FieldVisit->find('all', [
                'contain' => [
                    'FieldVisit'
                ],
                'fields' => [
                    'longitude',
                    'latitude'
                    ]
                ]);
            $dataArr = [];
            foreach ($coordinateData as $data) {
                $dataArr[] = $data[0]['longitude'];
                $dataArr[] = $data[0]['latitude'];
            }

基本上我希望输出显示帐号和曝光总和的数量,每个变量标记为1,前面是帐号和曝光的总数。

请帮忙。

2 个答案:

答案 0 :(得分:0)

我们可以将'data.frame'转换为'data.table'(setDT(df1),使用melt将其重新整理为'long',按'变量'分组,我们得到{{1 'value1','{1}}的'Exposure',其中'value1'为1,行数(sum),以及'Exposure'中所有值的sum得到预期的输出。

.N

答案 1 :(得分:0)

一种直截了当的方法是使用doBy包

library(doBy)
df <- data.frame(account=LETTERS[1:10], exposure=1:10*3.14, mark=round(runif(10)))
res <- as.data.frame(summaryBy(exposure~mark+account, df, FUN=sum))
subset(res, mark==0)

从基础数据开始(注意,样本中有randoms)

> df
   account exposure mark
1        A     3.14    1
2        B     6.28    1
3        C     9.42    0
4        D    12.56    0
5        E    15.70    1
6        F    18.84    0
7        G    21.98    1
8        H    25.12    0
9        I    28.26    1
10       J    31.40    0

给出标记了标记的临时结果(在这种情况下没有实际的求和,但也会这样做)

> res
   mark account exposure.sum
1     0       A         3.14
2     0       D        12.56
3     0       F        18.84
4     0       H        25.12
5     1       B         6.28
6     1       C         9.42
7     1       E        15.70
8     1       G        21.98
9     1       I        28.26
10    1       J        31.40

可以使用

选择最终结果
> subset(res, mark==0)
  mark account exposure.sum
1    0       A         3.14
2    0       D        12.56
3    0       F        18.84
4    0       H        25.12