如何为新的平均变量创建单独的行中具有三个值的变量?

时间:2018-09-21 17:34:02

标签: r mutate

我的数据看起来像这样

     subject treatment time outcome1 outcome2 
1       1         a    1       80       15
2       1         a    2       75       14
3       1         a    3       74       12
4       2         b    1       90       16
5       2         b    2       81       15
6       2         b    3       76       15

我想创建一个新变量,该变量是时间1、2、3时的result1值的平均值。我想对所有对象都这样做(40)。然后,我想对结果2直到结果22进行此操作。

我尝试过

data <- data %>% 
group_by(subject) %>% 
summarise(mkcal = mean(kcal))

,但是它给出了错误的平均值,并删除了除平均值以外的所有数据。当我尝试突变而不是总结时,它只是创建一个新列,它是kcal列的副本。我在做什么错了?

感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

使用dplyr

df %>%
  group_by(subject) %>%
  mutate_at(vars(contains("outcome")), funs(mean = mean(., na.rm = TRUE)))

# A tibble: 6 x 7
# Groups:   subject [2]
  subject treatment  time outcome1 outcome2 outcome1_mean outcome2_mean
    <int> <fct>     <int>    <int>    <int>         <dbl>         <dbl>
1       1 a             1       80       15          76.3          13.7
2       1 a             2       75       14          76.3          13.7
3       1 a             3       74       12          76.3          13.7
4       2 b             1       90       16          82.3          15.3
5       2 b             2       81       15          82.3          15.3
6       2 b             3       76       15          82.3          15.3

数据:

df <- read.table(text = "subject treatment time outcome1 outcome2 
1       1         a    1       80       15
           2       1         a    2       75       14
           3       1         a    3       74       12
           4       2         b    1       90       16
           5       2         b    2       81       15
           6       2         b    3       76       15", header = TRUE)