我的数据看起来像这样
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列的副本。我在做什么错了?
感谢您的阅读。
答案 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)