我有一个数据框,它有10列和"n"行(很多行)。
Dataframe 的概念很简单:它获取在时间"d"对日期"t"的汇率的市场预期。例如:今天,我们有1月23日、2月23日等汇率的市场预期......(此数据框架按月提供预期,每日更新)
该数据框架包含自2019年1月至2023年12月的历史估计值。
总之,我们有一个"date_of_estimate"列和一个"estimation_reference"列。
问题是,我想过滤这个庞大的数据框架,以获得自2019年1月1日以来所有月度估计的最新值。
因此,代码应该像一个maxif函数一样工作,它根据"estimation_reference"值获取"date_of_estimate"列的最大值。"estimation_reference"也可以解释为字符串,如"Group_A"、"Group_B"等。
我怎样才能得到我想要的结构呢?我对R不是很熟悉,这是一个重要的工作程序,刚刚落在我的腿上...
先谢了
我的第一个猜测是使用聚合函数,我使用的代码是这样的:
`Cambio_PorDataRef = aggregate(base_cambio, by = list(base_cambio$Data), max)`
其中base_cambio是包含所有日期和估计值的原始 Dataframe ,base_cambio $data是我上面提到的"date_of_estimate"列。
结果是:enter image description here
"data_referencia"列应该由唯一值组成,其中"date_of_estimate"(图像中的第1组列)应该是最新更新的(此估计值可用的最新日期),但它带来了重复的值,这些值似乎没有意义,因为它应该从2021年1月开始,并逐月进行,直到2023年12月(即12月23日)。
通过运行dput(head(base_cambio,20)),我得到了:
structure(list(Indicador = c("Câmbio", "Câmbio", "Câmbio", "Câmbio",
"Câmbio", "Câmbio", "Câmbio", "Câmbio", "Câmbio", "Câmbio", "Câmbio",
"Câmbio", "Câmbio", "Câmbio", "Câmbio", "Câmbio", "Câmbio", "Câmbio",
"Câmbio", "Câmbio"), Data = structure(c(18655, 18654, 18653,
18652, 18649, 18648, 18647, 18646, 18645, 18642, 18641, 18640,
18639, 18638, 18635, 18634, 18633, 18632, 18631, 18683), class = "Date"),
DataReferencia = c("01/2021", "01/2021", "01/2021", "01/2021",
"01/2021", "01/2021", "01/2021", "01/2021", "01/2021", "01/2021",
"01/2021", "01/2021", "01/2021", "01/2021", "01/2021", "01/2021",
"01/2021", "01/2021", "01/2021", "02/2021"), Media = c(5.3,
5.29, 5.29, 5.29, 5.28, 5.25, 5.25, 5.25, 5.24, 5.24, 5.22,
5.21, 5.21, 5.19, 5.17, 5.14, 5.14, 5.13, 5.13, 5.38), Mediana = c(5.3,
5.3, 5.3, 5.3, 5.3, 5.25, 5.25, 5.25, 5.25, 5.25, 5.21, 5.2,
5.2, 5.16, 5.15, 5.15, 5.15, 5.14, 5.13, 5.4), DesvioPadrao = c(0.11,
0.11, 0.11, 0.11, 0.11, 0.1, 0.1, 0.1, 0.1, 0.11, 0.14, 0.14,
0.15, 0.15, 0.15, 0.14, 0.13, 0.13, 0.13, 0.07), Minimo = c(4.85,
4.85, 4.85, 4.85, 4.85, 4.85, 4.85, 4.85, 4.85, 4.85, 4.85,
4.85, 4.85, 4.85, 4.85, 4.85, 4.85, 4.85, 4.85, 5), Maximo = c(5.62,
5.62, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.49, 5.49,
5.6, 5.6, 5.6, 5.6, 5.6, 5.6, 5.6, 5.52), numeroRespondentes = c(102L,
102L, 100L, 99L, 99L, 95L, 97L, 97L, 97L, 98L, 92L, 92L,
90L, 89L, 90L, 91L, 90L, 90L, 89L, 107L), baseCalculo = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L)), row.names = c(NA, -20L), class = c("tbl_df",
"tbl", "data.frame"))
数据框如下所示:
该函数应查找最高第二列的(最新)值(Data
)表示第三列中的每个唯一匹配项由于该 Dataframe 仅具有一个唯一值,因此整个第一行应当是im寻找的码的输出,因为它在第二列上具有最高值。代码应该能够对第三列上的每个唯一值做同样的事情,并将其全部收集到一个新的 Dataframe 中,过滤,原始 Dataframe 的所有列。
输出应为:
1条答案
按热度按时间9gm1akwq1#
您需要
dplyr::slice_max()
:或者一个基本R方法:
任一方法的结果: