首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何用平均值替换表中的行

R:如何用平均值替换表中的行
EN

Stack Overflow用户
提问于 2017-10-12 22:56:54
回答 2查看 73关注 0票数 2

对不起,我可能使用了错误的搜索词,但我找不到解决办法。

给出一个由两个参与者(id)组成的实验,每个参与者在两个不同参数(par1、par2)下执行6次任务:

代码语言:javascript
复制
id <- c(rep(1,6),rep(2,6)) 
par1 <- c(rep("a",9),rep("b",3))
par2 <- c(rep("c",3),rep("d",9))
val <- rnorm(12)
data <- data.frame(id,par1,par2,val)

如何将"id“、"par1”和"par2“的所有行替换为一行,其中"val”的值是被替换行的"val“值的平均值?

因此,结果是这样一张表格:

代码语言:javascript
复制
id par1 par2 val
1   a    c   (mean of row 1-3)
1   a    d   (mean of row 4-6)
2   a    d   (mean of row 7-9)
2   b    d   (mean of row 10-12)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-12 23:37:58

对于dplyr方法:

代码语言:javascript
复制
library(dplyr)

set.seed(123)  # for reproducibility

id <- c(rep(1, 6), rep(2, 6))
par1 <- c(rep("a", 9), rep("b", 3))
par2 <- c(rep("c", 3), rep("d", 9))
val <- rnorm(12)
data <- data.frame(id, par1, par2, val)

# group by all variables except `val`
data %>% group_by_at(vars(-val)) %>% summarize(val = mean(val))

这意味着:

代码语言:javascript
复制
# A tibble: 4 x 4
# Groups:   id, par1 [?]
     id   par1   par2        val
  <dbl> <fctr> <fctr>      <dbl>
1     1      a      c  0.2560184
2     1      a      d  0.6382870
3     2      a      d -0.4969993
4     2      b      d  0.3794112
票数 2
EN

Stack Overflow用户

发布于 2017-10-13 02:24:11

下面是data.table的一个选项。将“data.frame”转换为“data.table”(setDT(data)),按“id”、“par1”、“par2 2”分组,得到“val”的mean

代码语言:javascript
复制
library(data.table)
setDT(data)[, .(val = mean(val)), by = .(id, par1, par2)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46720085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档