【问题标题】:create a data frame by selecting the max from subset of a data set [duplicate]通过从数据集的子集中选择最大值来创建数据框[重复]
【发布时间】:2018-08-12 02:47:48
【问题描述】:

我希望通过从第一个数据帧中选择最大子集来从另一个数据帧创建一个数据帧。假设我有第一个数据框

df:

name     date      weekday    util
----     ----      -------    ---- 
alpha    201801          1    10.1
alpha    201801          2    7.1
alpha    201801          3    1.1 
alpha    201801          4    4.1  
bravo    201801          1    9.9
bravo    201801          2    8.9
bravo    201801          3    1.9
bravo    201801          4    11.9
charlie  201801          1    0.1
charlie  201801          2    2.0
charlie  201801          3    7.3
charlie  201801          4    5.0

我希望使用 max util 为每个唯一的日期创建另一个数据框,名称元组

df_unique:

name       date       util
-----      ----       ----
alpha      201801     10.1
bravo      201801     11.9
charlie    201801     7.3

我知道我们可以通过使用来选择最大值

>max(df[df$name == 'alpha' && df$date == 201801, df$util])
10.1

但是,我们将如何为每个唯一名称、日期元组执行此操作。这甚至可能还是我需要创建一个函数来做到这一点?

【问题讨论】:

  • aggregate(df1["util"], df1[c("name", "date")], max)

标签: r dataframe unique


【解决方案1】:

这是使用data.table 包的解决方案。

library(data.table)

setDT(dat)

dat2 <- dat[, .(util = max(util)), by = .(name, date)]
dat2
#       name   date util
# 1:   alpha 201801 10.1
# 2:   bravo 201801 11.9
# 3: charlie 201801  7.3

或者我们可以使用dplyr 包。

library(dplyr)

dat2 <- dat %>%
  group_by(name, date) %>%
  summarise(util = max(util)) %>%
  ungroup()
dat2
# # A tibble: 3 x 3
#   name      date  util
#   <chr>    <int> <dbl>
# 1 alpha   201801  10.1
# 2 bravo   201801  11.9
# 3 charlie 201801   7.3

数据

dat <- read.table(text = "name     date      weekday    util
                  alpha    201801          1    10.1
                  alpha    201801          2    7.1
                  alpha    201801          3    1.1 
                  alpha    201801          4    4.1  
                  bravo    201801          1    9.9
                  bravo    201801          2    8.9
                  bravo    201801          3    1.9
                  bravo    201801          4    11.9
                  charlie  201801          1    0.1
                  charlie  201801          2    2.0
                  charlie  201801          3    7.3
                  charlie  201801          4    5.0",
                  header = TRUE, stringsAsFactors = FALSE)

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 2015-12-30
    • 2016-11-19
    • 2012-07-17
    • 2016-07-02
    • 2016-03-10
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多