【问题标题】:Duplicated rows means with original variables重复行意味着具有原始变量
【发布时间】:2017-12-13 13:15:39
【问题描述】:

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

我有观察对象的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 响应我的命令:这意味着只有 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

谢谢!

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我用于 130 多个变量的内容是:df %&gt;% group_by(ID) %&gt;% mutate_if(is.double, mean) %&gt;% distinct(ID, is.double, .keep_all=TRUE)
    【解决方案2】:

    重要的是,您只指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
    

    【讨论】:

    • 谢谢!这是一种方法,但我有 135 个 3 种变量。所以我希望我能得到一些可以自动使用变量类型的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多