- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含多个模型参数的多对估计和方差的数据框,每个模型参数都在多个部分之一中。这是一个生成说明性示例的函数:
samplerats <- function(){
set.seed(310366)
d = data.frame(section=c(rep("S1",10),rep("S2",10),rep("S3",5)))
nr = nrow(d)
for(i in 1:5){
d[[paste0("est_v",i)]] = rnorm(nr)
d[[paste0("var_v",i)]] = runif(nr)
}
d
}
> d=samplerats()
> head(d)
section est_v1 var_v1 est_v2 var_v2 est_v3 var_v3
1 S1 0.3893008 0.1620882 -1.1915391 0.15439565 0.62022284 0.5487519
2 S1 0.8221099 0.3280630 0.7729817 0.14810283 -1.11337584 0.9947342
3 S1 0.8023230 0.1862810 -1.5285389 0.85648574 -1.74666907 0.4267944
4 S1 -0.2252865 0.5660111 -0.4348341 0.53013027 0.01823185 0.1379821
5 S1 -0.9475335 0.7904085 -1.0882961 0.40567780 1.69607397 0.3450983
6 S1 0.4415259 0.2969032 0.9200723 0.08754107 0.57010457 0.7579002
[with another two variables and 25 rows in total]
> d %>% group_by(section) %>% summarise(var(est_v1)/mean(var_v1))
Source: local data frame [3 x 2]
section var(est_v1)/mean(var_v1)
1 S1 0.5874458
2 S2 2.4449153
3 S3 2.8621725
v1
的答案,我们只需要对所有其他变量重复。请注意,列名是
est_
或
var_
后跟一个变量名,可能是
alpha
或
g2
或其他一些字母。
ratit <- function(d){
isVAR <- function(s){stringr::str_sub(s,1,4)=="var_"}
spreads = reshape2::melt(d) %>% mutate(isVAR=isVAR(variable), Variable = str_replace(variable,"^.*_",""))
vout = spreads %>% group_by(Variable, section, isVAR) %>% summarise(Z=if(isVAR(variable[1])){mean(value)}else{var(value)})
ratios = vout %>% group_by(section, Variable) %>% summarise(Vratio = Z[1]/Z[2]) %>% dcast(section ~ Variable)
ratios
}
> ratit(d)
Using section as id variables
Using Vratio as value column: use value.var to override.
section v1 v2 v3 v4 v5
1 S1 0.5874458 3.504169 3.676488 1.1716684 1.742021
2 S2 2.4449153 1.177326 1.106337 1.0700636 3.263149
3 S3 2.8621725 2.216099 3.846062 0.7777452 2.122726
v1
相同- 只是之前的例子。但是糟糕。
est var section variable
1 0.3893008 0.1620882 S1 v1
2 0.8221099 0.3280630 S1 v1
3 0.8023230 0.1862810 S1 v1
4 -0.2252865 0.5660111 S1 v1
5 -0.9475335 0.7904085 S1 v1
6 0.4415259 0.2969032 S1 v1
dd %>% group_by(section, variable) %>% summarise(rat=var(est)/mean(var)) %>% spread(variable, rat)
最佳答案
这是 base R
的一种解决方案使用 mapply
est <- d[grep('^est|section', colnames(d))]
var1 <- d[grep('^var|section', colnames(d))]
lstest <- split(est[-1], est$section)
lstvar <- split(var1[-1], var1$section)
res <- t(mapply(function(x,y) mapply(function(.x, .y)
var(.x)/mean(.y), x, y), lstest, lstvar))
dplyr
est1 <- est %>%
group_by(section) %>%
summarise_each(funs(var)) %>%
data.frame()
var2 <- var1 %>%
group_by(section) %>%
summarise_each(funs(mean)) %>%
data.frame()
est1[-1]/var2[-1]
samplerats <- function(){
set.seed(310366)
d <- data.frame(section=sample(paste0("S", 1:20),
1e5, replace=TRUE))
nr <- nrow(d)
for(i in 1:20){
d[[paste0('est_v', i)]] <- rnorm(nr)
d[[paste0('var_v', i)]] <- runif(nr)
}
d
}
d <- samplerats()
akrun <- function(){
est1 <- d %>%
group_by(section) %>%
summarise_each(funs(var), starts_with('est'))
var1 <- d %>%
group_by(section) %>%
summarise_each(funs(mean), starts_with('var') )
cbind(unique(est1[1]), est1[-1]/var1[-1])
}
#Assuming that the `reshaped` dataset from @Josh O'Brien's method
#is further processed using `spread` from `tidyr`
josh <- function(){
dd <- reshape(d, varying = 2:ncol(d), direction = 'long',
sep="_", timevar="variable")
dd %>%
group_by(section, variable) %>%
summarise(rat=var(est)/mean(var)) %>%
spread(variable, rat)
}
#Using `data.table` for @Henriks' method as the output from
# `merged.stack is `data.table`
henrik <- function(){
dS <- merged.stack(data = getanID(d, "section"),
var.stubs = c("est", "var"), sep = "_")
dcast.data.table(dS[ , list(rat=var(est)/mean(var)),
.(section, .time_1)], section~.time_1, value.var='rat')
}
DMC <- function(){
d %>%
gather(key, value, -section) %>%
separate(key, into = c("type", "var")) %>%
group_by(section, var) %>%
summarise(result = var(value[type == "est"]) / mean(value[type == "var"]))%>%
spread(var, result)
}
library(microbenchmark)
microbenchmark(akrun(), josh(), henrik(), DMC(), unit='relative', times=20L)
#Unit: relative
# expr min lq mean median uq max neval
#akrun() 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 20
# josh() 323.57129 335.51929 315.05115 312.02953 293.18614 308.30833 20
#henrik() 30.02737 33.95731 32.15254 34.72281 29.55944 35.26825 20
#DMC() 204.66445 211.82019 207.47286 201.33015 207.10875 231.24048 20
# cld
# a
# d
# b
# c
system.time
system.time({cbind(levels(d$section),
aggregate(. ~ section, d[c(1, grep("^est_", names(d)))], var)[-1] /
aggregate(. ~ section, d[c(1, grep("^var_", names(d)))], mean)[-1])}
)
# user system elapsed
# 2.228 0.002 2.229
system.time(akrun())
# user system elapsed
# 0.034 0.000 0.035
关于r - 使用成对的相关列(dplyr、tidyr、data.table),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28052822/
我正在 csv 上使用 hadoop 来分析一些数据。我使用sql/mysql(不确定)来分析数据,现在陷入了僵局。 我花了好几个小时在谷歌上搜索,却没有找到任何相关的东西。我需要一个查询,在该查询中
我正在为 Bootstrap 网格布局的“简单”任务而苦苦挣扎。我希望在大视口(viewport)上有 4 列,然后在中型设备上有 2 列,最后在较小的设备上只有 1 列。 当我测试我的代码片段时,似
对于这个令人困惑的标题,我深表歉意,我想不出这个问题的正确措辞。相反,我只会给你背景信息和目标: 这是在一个表中,一个人可能有也可能没有多行数据,这些行可能包含相同的 activity_id 值,也可
具有 3 列的数据库表 - A int , B int , C int 我的问题是: 如何使用 Sequelize 结果找到 A > B + C const countTasks = await Ta
我在通过以下功能编写此查询时遇到问题: 首先按第 2 列 DESC 排序,然后从“不同的第 1 列”中选择 只有 Column1 是 DISTINCT 此查询没有帮助,因为它首先从第 1 列中进行选择
使用 Bootstrap 非常有趣和有帮助,目前我在创建以下需求时遇到问题。 “使用 bootstrap 在桌面上有 4 列,在平板电脑上有 2 列,在移动设备上有 1 列”谁能告诉我正确的结构 最佳
我是 R 新手,正在问一个非常基本的问题。当然,我在尝试从所提供的示例中获取指导的同时做了功课here和 here ,但无法在我的案例中实现这个想法,即可能是由于我的问题中的比较维度更大。 我的实
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个 df , delta1 delta2 0 -1 2 0 -1 0 0 0 我想知道如何分配 delt
您好,我想知道是否可以执行以下操作。显然,我已经尝试在 phpMyAdmin 中运行它,但出现错误。也许还有另一种方式来编写此查询。 SELECT * FROM eat_eat_restaurants
我有 2 个列表(标题和数据值)。我想要将数据值列 1 匹配并替换为头文件列 1,以获得与 dataValue 列 1 和标题值列 2 匹配的值 头文件 TotalLoad,M0001001 Hois
我有两个不同长度的文件,file2 是一个很大的引用文件,我从中提取文件 1 的数据。 我有一行 awk,我通常会对其进行调整以在我的文件中进行查找和替换,但它总是在同一列中进行查找和替换。 所以对于
假设我有两个表,如下所示。 create table contract( c_ID number(1) primary key, c_name varchar2(50) not
我有一个带有 varchar 列的 H2 表,其检查约束定义如下: CONSTRAINT my_constraint CHECK (varchar_field <> '') 以下插入语句失败,但当我删
这是最少量的代码,可以清楚地说明我的问题: One Two Three 前 2 个 div 应该是 2 个左列。第三个应该占据页面的其余部分。最后,我将添加选项来隐藏和
在 Azure 中的 Log Analytics 中,我为 VM Heartbeat 选择一个预定义查询,我在编辑器中运行查询正常,但当我去创建警报时,我不断收到警报“查询未返回 TimeGenera
在 Azure 中的 Log Analytics 中,我为 VM Heartbeat 选择一个预定义查询,我在编辑器中运行查询正常,但当我去创建警报时,我不断收到警报“查询未返回 TimeGenera
今天我开始使用 JexcelApi 并遇到了这个:当您尝试从特定位置获取元素时,不是像您通常期望的那样使用sheet.getCell(row,col),而是使用sheet.getCell(col,ro
我有一个包含 28 列的数据库。第一列是代码,第二列是名称,其余是值。 public void displayData() { con.Open(); MySqlDataAdapter
我很沮丧:每当我缩小这个网页时,一切都变得一团糟。我如何将网页居中,以便我可以缩小并且元素不会被错误定位。 (它应该是 2 列,但所有内容都合并为 1)我试过 但由于某种原因,这不起作用。 www.o
我是一名优秀的程序员,十分优秀!