我希望通过从第一个数据帧中选择最大子集来从另一个数据帧中创建一个数据帧。说我有第一个数据框
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
但是,我们将如何对每个唯一名称(日期元组)执行此操作。这是否有可能,或者我需要创建一个函数来做到这一点?
答案 0 :(得分:0)
这是使用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)