重复行表示原始变量

时间:2017-12-13 13:15:39

标签: r dplyr tidyr

我目前正在研究在实验室实验中生成的数据集,其中观察结果加倍(测量两次)。

我有ID观察对象,value结果,type对象和hour被测量(+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会响应我的命令:它只表示双值,但如何保留其他列?

至于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

谢谢!

2 个答案:

答案 0 :(得分:2)

我们可以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

答案 1 :(得分:1)

重要的是,你只是指double个变量吗?这是一个代码,适用于您的示例:

 df %>% group_by(ID) %>% summarise(value = mean(value), type = first(type), hour = first(hour))

# A tibble: 4 x 4
     ID     value    type  hour
    <int>     <dbl>  <fctr> <chr>
1     1  3.312154  banana    H1
2     2  5.812154 poireau    H3
3     3  8.312154   melon    H5
4     4 10.690296    kiwi    H7