【问题标题】:Using dplyr to get multiple max values of a dataframe使用 dplyr 获取数据帧的多个最大值
【发布时间】:2018-11-13 10:57:30
【问题描述】:

我有一个看起来像这样的数据框:

  Name    Variable1 Value1 Variable2 Value2
1 Michael         A      2      <NA>     <NA>
2 Michael         B      3      <NA>     <NA>
3 Michael      <NA>   <NA>         X       10
4    John         B      5      <NA>     <NA>
5    John         E      3      <NA>     <NA>
6    John      <NA>    <NA>        Y      20
7    John      <NA>    <NA>        Z      40
8    Paul         C     10      <NA>     <NA>
9    Paul         D      5      <NA>     <NA>

在所有行中,有一个 Variable1/Value1 对或一个 Variable2/Value2 对。 我正在尝试使用dplyrgroup_byfilter 函数的组合来生成一个数据框,该数据框具有(1)每个名称只有一行和(2)1和2的最大值对. 在这种情况下,我的决赛桌看起来像:

     Name Variable1 Value1 Variable2 Value2
1 Michael         B      3         X     10
2    John         B      5         Z     40
3    Paul         C     10      <NA>   <NA>

我似乎无法获得正确的分组流程来正确执行此操作。我想到的一个解决方案是将每对数据帧分成两个,过滤,分别使用group_byfilter,然后根据名称将它们重新组合在一起,但我想知道是否有人有提供更直接的解决方案。也许有summarise 的东西?

谢谢!

编辑:更正了表中缺失的 NA 值。

【问题讨论】:

  • aggregate(df, by=list(Name), + FUN=max, na.rm=TRUE)
  • dplyr 方法中:group_by(x, Name) %&gt;% summarise_all(max)。在data.table-speak:x[,lapply(.SD, max),by="Name"]
  • 这些解决方案似乎不起作用——两者都给我处理因素方面的错误,大概是因为 max 不适用于列变量 1 和变量 2。我希望能够得到 Value1 和 Value2 的最大值,然后也得到关联的变量。
  • 第 4 行和第 5 行中变量 2 的缺失值是空白还是 NA?
  • 它们本应为 NA。谢谢!固定。

标签: r dplyr


【解决方案1】:
library(dplyr)

df[is.na(df)] <- 0

df1 <-
  df %>%
  select(1:3)

df1_max <-
  df %>%
  group_by(Name) %>%
  summarise(Value1 = max(Value1))

df2 <-
  df %>%
  select(c(1, 4:5))

df2_max <-
  df %>%
  group_by(Name) %>%
  summarise(Value2 = max(Value2))

result <- left_join(
  left_join(df1_max, df1),
  left_join(df2_max, df2) %>%
    distinct()
) %>%
  select(c(1, 3, 2, 5, 4))

result[result == 0] <- NA

结果:

result

# A tibble: 3 x 5
  Name    Variable1 Value1 Variable2 Value2
  <chr>   <chr>      <dbl> <chr>      <dbl>
1 John    B              5 Z             40
2 Michael B              3 X             10
3 Paul    C             10 <NA>          NA

注意事项:

  • 在数据帧中,一行中的元素不是相互独立的。因此,您不应该将它们彼此分离。但这是您正在尝试做的,因为 Variable1 的最大值和 Variable2 的最大值不在同一行,但您希望您的结果对每个都有最大值(因此创建一个行原始数据框中不存在)。这就是为什么我将您的数据框分成 2 个,然后将它们与一个连接重新关联。

  • NA 的最大值和一个值是NA(我们不知道NA 是什么值,因为它丢失了,所以我们不知道最大值是多少)。然而,您认为NA 不如任何价值。由于这不是 R 的工作方式,我必须将 0 分配给您的 NA 以获得您认为的最大值,然后在最后将 NA 重新分配给 0

  • 您的数据中缺少两个值,我认为它们是 NA

【讨论】:

  • 好的!这一切对我来说都很有意义,也是我的想法,尽管我不知道 NA 的 max 函数。谢谢你的解释!
猜你喜欢
  • 2020-12-11
  • 1970-01-01
  • 2020-03-28
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2023-03-19
相关资源
最近更新 更多