我正在尝试实现一个程序来评估一组数字的中位数绝对偏差(通常通过GROUP BY子句获得).
我想要使用它的查询示例是:
select id, mad(values) from mytable group by id;
Run Code Online (Sandbox Code Playgroud)
我将通过聚合函数示例,但有点困惑,因为函数需要在完成所有迭代之前知道所有数字的中位数.
任何关于如何实现这样的功能的指针都将非常感激.
我想data.frame通过一个名为变量的标识符变量来聚合ensg.数据框如下所示:
chromosome probeset ensg symbol XXA_00 XXA_36 XXB_00
1 X 4938842 ENSMUSG00000000003 Pbsn 4.796123 4.737717 5.326664
Run Code Online (Sandbox Code Playgroud)
我想计算具有相同ensg值的行上每个数字列的平均值.这里的问题是我想保留其他身份变量染色体和符号不变,因为它们也是相同的ensg.
最后,我想有一个data.frame带有标识列chromosome,ensg,symbol并在具有相同标识符行数值列的意思.我实现了这个ddply,但与以下相比它非常慢aggregate:
spec.mean <- function(eset.piece)
{
cbind(eset.piece[1,-numeric.columns],t(colMeans(eset.piece[,numeric.columns])))
}
t
mean.eset <- ddply(eset.consensus.grand,.(ensg),spec.mean,.progress="tk")
Run Code Online (Sandbox Code Playgroud)
我的第一个聚合实现看起来像这样,
mean.eset=aggregate(eset[,numeric.columns], by=list(eset$ensg), FUN=mean, na.rm=TRUE);
Run Code Online (Sandbox Code Playgroud)
并且要快得多.但问题aggregate是我必须重新描述描述变量.我还没有弄清楚如何使用我的自定义函数,aggregate因为aggregate它不传递数据帧而只传递矢量.
是否有一种优雅的方式来做到这一点aggregate?或者有更快的方法来做到这一点ddply?
我试图复制官方统计中经常使用的表,但到目前为止没有成功.给定像这样的数据帧:
d1 <- data.frame( StudentID = c("x1", "x10", "x2",
"x3", "x4", "x5", "x6", "x7", "x8", "x9"),
StudentGender = c('F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'M', 'M'),
ExamenYear = c('2007','2007','2007','2008','2008','2008','2008','2009','2009','2009'),
Exam = c('algebra', 'stats', 'bio', 'algebra', 'algebra', 'stats', 'stats', 'algebra', 'bio', 'bio'),
participated = c('no','yes','yes','yes','no','yes','yes','yes','yes','yes'),
passed = c('no','yes','yes','yes','no','yes','yes','yes','no','yes'),
stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
我想创建一个表格,显示每年,所有学生(所有)和女性,参与者和通过的人数.请注意下面的"ofwhich"指的是所有学生.
我想到的一张桌子看起来像这样:
cbind(All = table(d1$ExamenYear),
participated = table(d1$ExamenYear, d1$participated)[,2],
ofwhichFemale = table(d1$ExamenYear, d1$StudentGender)[,1],
ofwhichpassed = table(d1$ExamenYear, d1$passed)[,2])
Run Code Online (Sandbox Code Playgroud)
我相信在R.这种事情有更好的方法.
注意:我已经看过LaTex解决方案,但我没有使用这对我有用,因为我需要在Excel中导出表.
提前致谢
我想将我的数据框(编辑:以 CPU 高效的方式)减少到具有 c3、c4 对唯一值的行,同时保留所有列。换句话说,我想转换我的数据框
> df <- data.frame(c1=seq(7), c2=seq(4, 10), c3=c("A", "B", "B", "C", "B", "A", "A"), c4=c(1, 2, 3, 3, 2, 2, 1))
c1 c2 c3 c4
1 1 4 A 1
2 2 5 B 2
3 3 6 B 3
4 4 7 C 3
5 5 8 B 2
6 6 9 A 2
7 7 10 A 1
Run Code Online (Sandbox Code Playgroud)
到数据框
c1 c2 c3 c4
1 1 4 A 1
2 2 5 B …Run Code Online (Sandbox Code Playgroud) 这就是我想要做的.我的数据框有一个因子变量"country",我想根据国家/地区拆分数据框.然后,我想对每个国家/地区的数据框的每个变量采用列均值.
数据在这里:https://github.com/pourque/country-data
到目前为止我已经这样做了......
myList <- split(df1, df1$country)
for(i in 1:length(myList)) {
aggregate <- mapply(myList[[i]][,-c(38:39)], colMeans)
}
Run Code Online (Sandbox Code Playgroud)
(我不包括第38和第39列,因为这些是因素.)
我已经读过这个(多个列表中的函数),这让我觉得mapply就是这里的答案......但是我收到了这个错误:
Error in match.fun(FUN) :
'myList[[i]][, -c(38:39)]' is not a function, character or symbol
Run Code Online (Sandbox Code Playgroud)
也许我的格式不正确?
目前我有这个相当大的查询
count()按事件名称和日期分组的事件,将每日、每周、每月计数聚合到中间表中。avg()按事件分组来选择每个中间表的平均计数,对结果进行联合,并且因为我想为每天、每周、每月设置一个单独的列,将填充值 0 放入空列中。查询虽然很大,但我觉得我正在做很多重复的工作。有什么办法可以更好地执行此查询或使其更小吗?我以前没有真正做过这样的查询,所以我不太确定。
WITH monthly_counts as (
SELECT
event,
count(*) as count
FROM tracking_stuff
WHERE
event = 'thing'
OR event = 'thing2'
OR event = 'thing3'
GROUP BY event, date_trunc('month', created_at)
),
weekly_counts as (
SELECT
event,
count(*) as count
FROM tracking_stuff
WHERE
event = 'thing'
OR event = 'thing2'
OR event = 'thing3'
GROUP BY event, date_trunc('week', created_at)
),
daily_counts as (
SELECT
event,
count(*) as count
FROM tracking_stuff
WHERE …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,其中每个人(id)都有一个e_date,并且因为每个人都可以拥有多个e_date,所以我试图获得每个人的最早日期.所以基本上我想有一个数据集,每个id每行显示一行,显示他最早的e_date值.我使用聚合函数来查找最小值,我创建了一个组合日期和id的新变量,最后我使用创建的新变量基于包含最小值的原始数据集进行子集化.我来这个:
new <- aggregate(e_date ~ id, data_full, min)
data_full["comb"] <- NULL
data_full$comb <- paste(data_full$id,data_full$e_date)
new["comb"] <- NULL
new$comb <- paste(new$lopnr,new$EDATUM)
data_fixed <- data_full[which(new$comb %in% data_full$comb),]
Run Code Online (Sandbox Code Playgroud)
第一件事是聚合函数似乎根本不起作用,它减少了行数但查看数据我可以清楚地看到一些id出现不同的e_date不止一次.另外,当我使用as.Date格式而不是日期(整数)的原始格式时,代码给出了不同的结果.我认为答案很简单,但我很震惊.
我的数据有一个分类列,该列将数据和其他列分组在 dataframe 中df。
id subid value
1 10 1.5
1 20 2.5
1 30 7.0
2 10 12.5
2 40 5
Run Code Online (Sandbox Code Playgroud)
subid我需要的是一列,其中包含每个中每个值的平均值id。例如df可以是:
id subid value id_sum proportion
1 10 1.5 11.0 0.136
1 20 2.5 11.0 0.227
1 30 7.0 11.0 0.636
2 10 12.5 17.5 0.714
2 40 5 17.5 0.285
Run Code Online (Sandbox Code Playgroud)
现在,我尝试通过执行以下操作来获取 id_sum 列:
df['id_sum'] = df.groupby('id')['value'].sum()
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有像希望的那样发挥作用。我的最终目标是获得proportion专栏。获得它的正确方法是什么?
如标题所述,我在使用聚合方法从 MongoDB Compass 查询时遇到了一些问题。我有一个这种形式的文件集合:
{"Array":[{"field":"val","field2":"val2"},{"field":"val","field2":"val2"},{"field":"val","field2":"val2"},{"field":"val","field2":"val2"},{"field":"val","field2":"val2"},...]}
Run Code Online (Sandbox Code Playgroud)
使用 mongo shell 或 Studio 3T 软件我用聚合方法查询它,下面是一个例子:
db.collection.aggregate([
{ $match: {"Array.field": "val"}},
{ $unwind: "$Array"},
{ $match: {"Array.field": "val"}},
{ $group: {_id: null, count: {$sum:NumberInt(1)}, Array: {$push: "$Array"}}},
{ $project: {"N. Hits": "$count", Array:1}}
])
Run Code Online (Sandbox Code Playgroud)
我在其中查找具有字段值 = "val" 的 Array 元素并对其进行计数。这很好用,但我不知道如何在 MongoDB Compass 中做同样的事情

在查询栏中,我有“过滤器”、“项目”和“排序”,我可以进行常规查询,但我不知道如何使用聚合方法。谢谢
考虑以下数据框:
\ndummy_df <- tibble(\n A=c("ABC", "ABC", "BCD", "CDF", "CDF", "CDF"),\n B=c(0.25, 0.25, 1.23, 0.58, 0.58, 0.58),\n C=c("lorem", "ipsum", "dolor", "amet", "something", "else"),\n D=c("up", "up", "down", "down", "down", "down"),\n E=c(132, 132, 243, 512, 512, 512),\n F=c("m1", "m1", "m5", "m3", "m3", "m3"),\n G=c("val", "val", "mur", "mad", "mad", "mad"),\n H=c("grx", "grx", "bcn", "sal", "sal", "sal"),\n I=c(1.68, 1.68, 2.31, 3.12, 3.12, 3.12),\n J=c("p", "p", "f", "p", "p", "p"),\n K=c(100, 100, 200, 143, 143, 143)\n)\n\n# A tibble: 6 \xc3\x97 11\n A B C D …Run Code Online (Sandbox Code Playgroud)