r - 重复的行意味着原始变量

标签 r dplyr tidyr

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

我有观察到的对象的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/

相关文章:

r - 使用二元响应变量绘制系统发育 Logistic 回归

r - 使用 strsplit 以三种方式拆分变量

r - 将两列绘制为条形图,将第三列绘制为折线图 ggplot

r - 我如何使用 R 在 Stata 中执行类似 foreach 的操作?

windows - 在 R 中查找 Windows 用户名

r - dplyr 小组评估,同时评估单个项目

r 中显式行的行号

r - 如何将列值与定界符以及定界符的异常(exception)结合起来?

r - 在 Y 列数据的条件下转置 X 列数据

r - 在一个数据框上,如果它们存在于另一个数据框上,则重复值