如何在R中根据其他列获取某一列的最大值

3
假设我有以下表格,
姓名 城市 价值
汤姆 纽约 1
汤姆 纽约 2
汤姆 纽约 4
詹姆斯 纽约 1
詹姆斯 纽约 2
托尼 华盛顿特区 1
托尼 华盛顿特区 2
我想按城市找到总价值,但对于每个姓名,只需取其最大值。所以对于这个表格,我应该得到以下结果:
城市 价值
纽约 6
华盛顿特区 2
我尝试过使用各种dyplr方法,但没有一个能够实现这个功能。
3个回答

2
这里有另一种方法 -
library(dplyr)

df %>%
  arrange(desc(Value)) %>%
  distinct(Name, City, .keep_all = TRUE) %>%
  group_by(City) %>%
  summarise(Value = sum(Value))

#  City  Value
#  <chr> <int>
#1 DC        2
#2 NY        6

如果有多个值列,并且我需要一个按城市汇总每个值列最大值的数据框,该怎么办? - user11607046

1

这里有一个用data.table的一行代码的方法:

library(data.table)

setDT(df)[df[, .I[which.max(Value)], by=c("Name", "City")]$V1][, sum(Value), by=City]

输出

   City V1
1:   NY  6
2:   DC  2

基础R

aggregate(Value ~ City, merge(aggregate(Value ~ Name + City, data=df, max), df, all.x=T), sum)

  City Value
1   DC     2
2   NY     6

数据

df <- structure(list(
  Name = c("Tom", "Tom", "Tom", "James", "James",
           "Tony", "Tony"),
  City = c("NY", "NY", "NY", "NY", "NY", "DC",
           "DC"),
  Value = c(1L, 2L, 4L, 1L, 2L, 1L, 2L)
),
class = "data.frame",
row.names = c(NA, -7L))

0
假设您的数据集称为df1:
library(dplyr)
df1 %>% group_by(City, Name) %>% slice_max(Value, with_ties = FALSE) %>% ungroup() %>% select(City, Value) %>% group_by(City) %>% summarise(Value = sum(Value))


2
也许可以使用 slice_max(Value, with_ties = FALSE) 来避免在一个城市中某个名称的最大值相同时重复计数。 - Jon Spring

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接