我有一个与此类似的数据集,大约有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,前面是帐号和曝光的总数。
请帮忙。
答案 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