【问题标题】:New Counting Groups Column with dplyr::group_by带有 dplyr::group_by 的新计数组列
【发布时间】:2018-09-26 13:19:17
【问题描述】:

我正在尝试做的是选择每个唯一的平均值(或 CellLine,同样的想法)并创建一个名为 AVGMOrder 的新列,该列对 48 个唯一组进行计数。我不知道为什么我收到这个错误,说组大小是错误的。

感谢您的帮助!

> xist.df %>% group_by(Mean) %>% dplyr::mutate(AVGMOrder = seq(unique(Mean)))
# A tibble: 240 x 8
# Groups:   Mean [48]
   CpG        geneID CellLine                                         Meth OrigOrder Sex     Mean AVGMOrder
   <chr>      <chr>  <fct>                                           <dbl> <chr>     <chr>  <dbl>     <int>
 1 cg03554089 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.455 286339    Female 0.511         1
 2 cg12653510 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.491 286340    Female 0.511         1
 3 cg05533223 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.515 286341    Female 0.511         1
 4 cg11717280 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.489 286342    Female 0.511         1
 5 cg20698282 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.605 286343    Female 0.511         1
 6 cg03554089 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.491 376195    Female 0.519         1
 7 cg12653510 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.542 376196    Female 0.519         1
 8 cg05533223 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.483 376197    Female 0.519         1
 9 cg11717280 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.503 376198    Female 0.519         1
10 cg20698282 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.574 376199    Female 0.519         1
# ... with 230 more rows
> unique(xist.df$Mean)
 [1] 0.5110429 0.5185945 0.5299138 0.5319983 0.5333054 0.5465974 0.5484405 0.5518451 0.5631779 0.5647687 0.5736542
[12] 0.5741134 0.5803745 0.5839757 0.6864615 0.6990654 0.6994218 0.7478772 0.7986107 0.8016629 0.8204100 0.8239762
[23] 0.8281310 0.8311557 0.8375466 0.8405810 0.8460025 0.8513457 0.8514124 0.8583415 0.8587972 0.8596317 0.8597244
[34] 0.8632049 0.8642843 0.8656732 0.8661410 0.8679203 0.8707371 0.8710717 0.8816540 0.8823595 0.8827582 0.8852854
[45] 0.8856669 0.8900214 0.8903854 0.8915359
> xist.df %>% group_by(Mean) %>% dplyr::mutate(AVGMOrder = seq(unique(xist.df$Mean)))
Error in mutate_impl(.data, dots) : 
  Column `AVGMOrder` must be length 5 (the group size) or one, not 48

回应评论:

> xist.df %>% group_by(Mean) %>% dplyr::mutate(AVGMOrder = row_number())
# A tibble: 240 x 8
# Groups:   Mean [48]
   CpG        geneID CellLine                                         Meth OrigOrder Sex     Mean AVGMOrder
   <chr>      <chr>  <fct>                                           <dbl> <chr>     <chr>  <dbl>     <int>
 1 cg03554089 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.455 286339    Female 0.511         1
 2 cg12653510 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.491 286340    Female 0.511         2
 3 cg05533223 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.515 286341    Female 0.511         3
 4 cg11717280 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.489 286342    Female 0.511         4
 5 cg20698282 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.605 286343    Female 0.511         5
 6 cg03554089 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.491 376195    Female 0.519         1
 7 cg12653510 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.542 376196    Female 0.519         2
 8 cg05533223 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.483 376197    Female 0.519         3
 9 cg11717280 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.503 376198    Female 0.519         4
10 cg20698282 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.574 376199    Female 0.519         5
# ... with 230 more rows

编辑评论。我希望每个唯一组都是一个值。 group_by 是不是这里的函数不对?

【问题讨论】:

  • group_by(Mean) %&gt;% mutate(r = row_number())?
  • 编辑主帖:
  • 你不需要AVGMOrder = seq(unique(Mean))。试试@Frank 的建议。这应该对你有用。
  • 对不起,我觉得我有点不清楚,我在我的主要帖子中添加了@Frank 回复。不幸的是,看起来 dplyr mutate 正在将 1-5 应用于各个组的每一行。我想将 48 组分开,让第一组的 AVGMOrder = 1,第二组 = 2,依此类推。
  • 很高兴您找到了处理它的方法。您可能还想在stackoverflow.com/q/13566562 上查看替代方案

标签: r dplyr


【解决方案1】:

我决定使用以下解决方法:

xist.df <- xist.df %>% dplyr::arrange(Mean)
order <- as.data.frame(unique(xist.df$Mean))
order$AVGMOrder <- seq(rownames(order))
colnames(order) <- c("Mean", "AVGMOrder")
xist.df <- left_join(xist.df, order)
xist.df

输出如下:

> order <- as.data.frame(unique(xist.df$Mean))
> order$AVGMOrder <- seq(rownames(order))
> order
   unique(xist.df$Mean) AVGMOrder
1             0.5110429         1
2             0.5185945         2
3             0.5299138         3
4             0.5319983         4
5             0.5333054         5
6             0.5465974         6
7             0.5484405         7
8             0.5518451         8
9             0.5631779         9
10            0.5647687        10
> colnames(order) <- c("Mean", "AVGMOrder")
> test <- left_join(xist.df, order)
Joining, by = "Mean"
> test
# A tibble: 240 x 8
# Groups:   CellLine [?]
   CpG        geneID CellLine                                         Meth OrigOrder Sex     Mean AVGMOrder
   <chr>      <chr>  <fct>                                           <dbl> <chr>     <chr>  <dbl>     <int>
 1 cg03554089 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.455 286339    Female 0.511         1
 2 cg12653510 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.491 286340    Female 0.511         1
 3 cg05533223 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.515 286341    Female 0.511         1
 4 cg11717280 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.489 286342    Female 0.511         1
 5 cg20698282 XIST   iPS__HDF51IPS5_passage6_Female____156.440.1.1   0.605 286343    Female 0.511         1
 6 cg03554089 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.491 376195    Female 0.519         2
 7 cg12653510 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.542 376196    Female 0.519         2
 8 cg05533223 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.483 376197    Female 0.519         2
 9 cg11717280 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.503 376198    Female 0.519         2
10 cg20698282 XIST   iPS__HDF51IPS10_passage37_Female____161.900.1.2 0.574 376199    Female 0.519         2
# ... with 230 more rows

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多