我有一个如下数据框
for
我必须为每个col1 col2 col3
A Z 10
A Y 8
A Z 15
B X 11
B Z 7
C Y 10
D Z 11
D Y 14
D L 16
distinct col1
col2
max(col3)
选择
输出数据框应该如下,
col1 col2 col3
A Z 15
B X 11
C Y 10
D L 16
如何在R
或SQL
提前致谢
答案 0 :(得分:4)
我们可以使用data.table
。我们转换了' data.frame'到' data.table' (setDT(df1)
),按' col1'分组,我们根据' col3' 的最大值索引对data.table(.SD
)进行子集化。 p>
library(data.table)
setDT(df1)[, .SD[which.max(col3)], col1]
# col1 col2 col3
#1: A Z 15
#2: B X 11
#3: C Y 10
#4: D L 16
或者我们可以在使用' col1'进行分组后使用top_n
中的dplyr
。
library(dplyr)
df1 %>%
group_by(col1) %>%
top_n(1)
答案 1 :(得分:3)
SQL回答:
如果没有其他行具有相同的col1值且col3值更高,则使用NOT EXISTS
返回一行。
select *
from tablename t1
where not exists (select 1 from tablename t2
where t2.col1 = t1.col1
and t2.col3 > t1.col3)
如果存在max(c3)平局,则返回col1的两行。
答案 2 :(得分:3)
在MySQL中做的另一种方式。
SELECT T1.*
FROM
table_name T1
INNER JOIN
(SELECT col1,MAX(col3) AS Max_col3 FROM table_name GROUP BY col1) T2
ON T1.`col1` = T2.`col1` and T2.`Max_col3`=t1.`col3`
希望这有帮助。