【问题标题】:All variables not read from data pipeline - dplyr未从数据管道读取的所有变量 - dplyr
【发布时间】:2018-04-19 07:13:33
【问题描述】:

我有一个包含 8 个变量的数据集,当我使用以下语法运行 dplyr 时,我的输出数据帧只有我在 dplyr 代码中使用过的变量,而我想要所有变量

ShowID<-MyData %>%
  group_by(id) %>%
  summarize (count=n()) %>%
  filter(count==min(count))
ShowID

所以我的输出将有两个变量 - ID 和 Count。如何在新数据框中获取其余变量?为什么会发生这种情况,我对此一无所知?

> ncol(ShowID)
[1] 2
> ncol(MyData)
[1] 8

MYDATA
key     ID  v1  v2  v3  v4  v5  v6
0-0-70cf97  1   89  20  30  45  55  65
3ad4893b8c  1   4   5   45  45  55  65
0-0-70cf97d7    2   848 20  52  66  56  56
0-0-70cf    2   54  4   846 65  5   5
0-0-793b8c  3   56454   28  6   4   5   65
0-0-70cf98  2   8   4654    30  65  6   21
3ad4893b8c  2   89  66  518 156 16  65
0-0-70cf97d8    3   89  20  161 1   55  45465
0-0-70cf    5   89  79  48  45  55  456
0-0-793b8c  5   89  20  48  545 654 4
0-0-70cf99  6   9   20  30  45  55  65


DESIRED
key     ID  count   v1  v2  v3  v4  v5  v6
0-0-70cf99  6   1   9   20  30  45  55  65


RESULT FROM CODE
ID  count
6   1

【问题讨论】:

  • @RonakShah 添加
  • 我很困惑为什么 group_by(id) 会删除所有其他变量?有人能告诉我在我的代码中的哪一步从新数据框中删除了变量吗?

标签: r dplyr


【解决方案1】:

您可以使用基本 R ave 方法计算每个组中的行数 (ID),然后选择具有最少行的那些组。

num_rows <- ave(MyData$v1, MyData$ID, FUN = length)
MyData[which(num_rows == min(num_rows)), ]

#          key ID v1 v2 v3 v4 v5 v6
#11 0-0-70cf99  6  9 20 30 45 55 65

在这种情况下,您也可以使用which.min 来避免一步,但是,如果有多个最小值,它将失败,因此,我使用了which

【讨论】:

    【解决方案2】:

    无需总结:

    ShowID <- MyData %>%
      group_by(id) %>%
      mutate(count = n()) %>%
      ungroup() %>%
      filter(count == min(count))
    

    【讨论】:

    • 谢谢,但我很困惑为什么 group_by(id) 会删除所有其他变量?我们必须在这段代码中结束 ungroup() 。你能告诉我我的代码或你的代码中的哪些变量是从新数据框中删除的吗?
    • 在我的代码中,您在任何时候都不会删除任何变量,只会添加一个并过滤它。您的问题是关于过滤,而不是总结。当您summarize 时,您需要明确告诉dplyr 您要总结什么。例如,如果您想找到每个“v”变量的平均值,则需要包含summarize(v1 = mean(v1), v2 = mean(v2)) 等。有关此操作的快捷方式,请查看summarize_allsummarize_atsummarize_if
    • 在您的代码中,您在汇总后只会得到两列,因为您定义了一个分组变量group_by(id),并在您的summarize 调用中定义了一个新变量count = n()。它不会创建任何其他变量的摘要,因为您没有告诉它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多