This question already has answers here:
How to select the rows with maximum values in each group with dplyr? [duplicate]
(6个答案)
How to select the row with the maximum value in each group
(17个答案)
去年关闭。
很抱歉,如果有人问这个问题,但我找不到现有的解决方案。
假设数据框
与相关的dput()
我想根据以下三个要求从
每个唯一日期只应保留一条记录 在 中同一日期的所有记录中,每个唯一日期选择的记录为max(var1)我想保留var2(以及真实数据集中的任何其他列)
因此,有效的所需输出将是
感谢您的任何帮助。请告知是否可以更好地措词以使其对他人有用。
原始
(6个答案)
How to select the row with the maximum value in each group
(17个答案)
去年关闭。
很抱歉,如果有人问这个问题,但我找不到现有的解决方案。
假设数据框
d
如下+-------------------------------+
| date | var1 | var2 |
+-------------------------------+
| 2019/01/01 | 100 | abc |
| 2019/01/01 | 102 | def |
| 2019/01/02 | 99 | ghi |
| 2019/01/02 | 98 | jkl |
| 2019/01/03 | 100 | mno |
| 2019/01/04 | 105 | pqr |
| 2019/01/04 | 98 | stu |
| 2019/01/04 | 110 | vwx |
+-----------------------------+
与相关的dput()
d <- structure(list(date = structure(c(17897, 17897, 17898, 17898,
17899, 17900, 17900, 17900), class = "Date"), var1 = c(100, 102,
99, 98, 100, 105, 98, 110), var2 = structure(1:8, .Label = c("abc",
"def", "ghi", "jkl", "mno", "pqr", "stu", "vwx"), class = "factor")),
class = "data.frame", row.names = c(NA, -8L))
我想根据以下三个要求从
d
中删除记录:d
因此,有效的所需输出将是
+----------------------------------+
| Date | var1 | var2 |
+----------------------------------+
| 01/01/19 | 102 | def |
| 02/01/19 | 99 | ghi |
| 03/01/19 | 100 | mno |
| 04/01/19 | 110 | vwx |
+----------------------------------+
感谢您的任何帮助。请告知是否可以更好地措词以使其对他人有用。
最佳答案
使用data.table
:
library(data.table)
setDT(d)
d[, .SD[which.max(var1)], by = date]
date var1 var2
1: 2019-01-01 102 def
2: 2019-01-02 99 ghi
3: 2019-01-03 100 mno
4: 2019-01-04 110 vwx
原始
R
的原始翻译可以得出:do.call(
rbind,
lapply(
split(d, d[["date"]]),
function(SD) SD[which.max(SD[["var1"]]), ]
)
)
07-24 09:52