我目前正在研究在实验室实验期间生成的数据集,其中观察结果加倍(测量两次)。
我有观察到的对象的ID
、结果的值
、对象的类型
以及小时
code> 它被测量了(+120 个我想要表示的其他分类、字符和数字变量)。这是一个简化的数据框:
library(dplyr)
A <- c(1,1,2,2,3,3,4)
B <- A*2.5+(rnorm(2,A[A],sd = 0.2))
C <- c("banana","banana","poireau","poireau","melon","melon","kiwi")
D <- c("H1","H2","H3","H4","H5","H6","H7")
df <-data_frame(ID=as.integer(A),value=B,type=factor(C), hour=as.character(D))
df
# A tibble: 7 x 4
ID value type hour
<int> <dbl> <fctr> <chr>
1 1 3.337352 banana H1
2 1 3.398814 banana H2
3 2 5.837352 poireau H3
4 2 5.898814 poireau H4
5 3 8.337352 melon H5
6 3 8.398814 melon H6
7 4 10.837352 kiwi H7
我的目标是通过 ID 计算值的平均值,以便仅保留一个值、一个 ID,但仍保留其他变量。我尝试的是:
df %>% group_by(ID) %>% summarise_if(is.double, mean)
# A tibble: 4 x 2
ID value
<int> <dbl>
1 1 3.368083
2 2 5.868083
3 3 8.368083
4 4 10.837352
如您所见,dplyr 响应我的命令:它仅意味着 double 值,但我如何保留其他列?
对于hour
字段,我希望保留表中的第一个值。所需的输出将是:
# A tibble: 4 x 4
ID `mean(value)` type hour
<int> <dbl> <fctr> <chr>
1 1 3.368083 banana H1
2 2 5.868083 poireau H3
3 3 8.368083 melon H5
4 4 10.837352 kiwi H7
谢谢!
最佳答案
我们可以执行mutate_if
,然后使用distinct
library(dplyr)
df %>%
group_by(ID) %>%
mutate_if(is.double, mean) %>%
distinct(ID, value, .keep_all = TRUE)
# A tibble: 4 x 4
# Groups: ID [4]
# ID value type hour
# <int> <dbl> <fctr> <chr>
#1 1 3.368083 banana H1
#2 2 5.868083 poireau H3
#3 3 8.368083 melon H5
#4 4 10.837352 kiwi H7
关于r - 重复的行意味着原始变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793959/