【问题标题】:How to find the max value by country and year in R? [duplicate]如何在R中按国家和年份查找最大值? [复制]
【发布时间】:2021-12-27 03:17:36
【问题描述】:

我有同一国家同一年份的多行数据。我想让它在一个国家/地区的特定年份只有 1 行数据。我希望我的指标变量是同一国家同一年所有行的最大可能值例如,我的数据当前如下所示:

country Year Trial
Afghanistan 1980 1
Afghanistan 1980 0
Afghanistan 1981 0
Afghanistan 1981 0
Afghanistan 1982 1
Afghanistan 1982 1

我想让它看起来像:

country Year presenceofTrial
Afghanistan 1980 1
Afghanistan 1981 0
Afghanistan 1982 1

对于 1980 年,由于我的第一行是 1,而我的第二行是 0,所以 1980 年的最后也是唯一的一行应该取最大值,即 1,等等。

我目前正在使用代码:

dataset %>% group_by(country, Year) %>% 
  summarise(
    presenceofTrial = max(dataset$Trial))

但是,无论 1 是否实际在原始表中,它只会为每一行返回 1。我该如何解决这个问题?

【问题讨论】:

  • = 用于赋值,== 用于比较。您也不应该在 dplyr 函数中使用 dataset$,因为它占用了整个向量的最大值,而不是逐列
  • 是的,我想将 Trial 的最大值赋给变量 presentofTrial
  • 知道了,现在可以使用了。感谢您的帮助!

标签: r dplyr group-by


【解决方案1】:

两种可能的方式(第二种更符合你的代码:

library(tidyverse)

df <- tibble(
    country = rep("Afghanistan", 6),
    Year = rep(1980:1982, each = 2),
    Trial = c(1,0,0,0,1,1)
)

first_method <- df %>%
    group_by(Year, country) %>%
    filter(Trial == max(Trial)) %>%
    slice(1)

second_method <- df %>%
    group_by(country,Year) %>%
    summarize(
        PresenceofTrial = max(Trial)
    )

【讨论】:

    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2021-02-28
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多