【问题标题】:Combining rows by index in R [duplicate]在R中按索引组合行[重复]
【发布时间】:2018-04-27 04:47:49
【问题描述】:

编辑:我知道已经回答了一个类似的问题,但它不适用于我在下面提供的数据集。上面的数据框是我使用扩展函数的结果。我仍然不确定如何巩固它。

EDIT2:我意识到我之前在数据上使用的 group_by 函数阻止了传播函数以我最初希望的方式工作。使用 ungroup 后,我能够直接从原始数据集(下图未显示)转到下图所示的第二个数据帧。


我有一个如下所示的数据框。我正在努力使每个 ID 号只有 1 行。

id  init_cont  family  1  2  3
1   I          C       1  NA NA
1   I          C       NA 4  NA
1   I          C       NA NA 3
2   I          D       2  NA NA
2   I          D       NA 1  NA
2   I          D       NA NA 4
3   K          C       3  NA NA
3   K          C       NA 4  NA
3   K          C       NA NA 1

我希望生成的数据框看起来像这样。

id  init_cont  family  1  2  3
1   I          C       1  4  3
2   I          D       2  1  4
3   K          C       3  4  1

【问题讨论】:

标签: r tidyverse split-apply-combine


【解决方案1】:

我们可以group_by 'd', 'init_cont', 'family' 然后执行summarise_all 以删除列中的所有NA 元素 1:3

library(dplyr)
df1 %>%
   group_by_at(names(.)[1:3]) %>%
   summarise_all(na.omit)
   #Or
   #summarise_all(funs(.[!is.na(.)]))
# A tibble: 3 x 6
# Groups: d, init_cont [?]
#      d init_cont family   `1`   `2`   `3`
#   <int> <chr>     <chr>  <int> <int> <int>
#1     1 I         C          1     4     3
#2     2 I         D          2     1     4
#3     3 K         C          3     4     1

【讨论】:

  • 如果我的列比图中的多几列(类似于 id、init_cont 和 family),我怎样才能将它们全部包含在 group_by 函数中而不用全部输入?
  • @melbez 你可以使用group_by_at 并传递names
  • summarise_all 的最后一行产生以下错误:summarise_impl(.data, dots) 中的错误:1 列的长度必须为 1(汇总值),而不是 0。这是指标题名称为“1”的列,而不是表中的第一列。
  • @melbez 这是基于您的示例,其中每个组只有一个非 NA。如果不是这样,你应该把它放在一个列表中
  • 它不起作用,因为我在以前的数据帧上使用了 group_by。我没有意识到 group_by 函数仍然存在。我必须取消分组数据框才能使其正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2015-04-23
相关资源
最近更新 更多