循环问题:均值和最小值

问题描述 投票:0回答:1

我正在 R 中实现一个循环。 让我尽可能地简化事情。

假设我有

#    country year     key potential
# 1      FRA 2010 FRA2010         0
# 2      FRA 2011 FRA2011         0
# 3      FRA 2012 FRA2012         0
# 4      FRA 2013 FRA2013         1
# 5      ITA 2010 ITA2010         1
# 6      ITA 2011 ITA2011         1
# 7      ITA 2012 ITA2012         0
# 8      ITA 2013 ITA2013         1
# 9      USA 2010 USA2010         0
# 10     USA 2011 USA2011         0
# 11     USA 2012 USA2012         1
# 12     USA 2013 USA2013         1

然后,我取满足势=1的唯一值

unique <- unique(df$key[df$potential == 1])

然后,我想得到每个国家的平均年份,使得潜力 == 1。我也想得到每个国家的最小年份,其中潜力 == 1。

这是我的尝试:

for (i in unique) {
mean_year <- mean(df$year[df$key == i], na.rm = TRUE)
date ,- min(df$year[df$key == i], na.rm = TRUE)
}

循环分别为每个mean_year 和date 返回一个值。相反,它应该为每个国家返回一个平均值年和日期值。

对于mean_year,我应该有:FRA 为 2013 年,ITA 为 2011.33,美国为 2012.5。

同样的推理也适用于日期。

数据

df <- structure(list(country = c("FRA", "FRA", "FRA", "FRA", "ITA", 
"ITA", "ITA", "ITA", "USA", "USA", "USA", "USA"), year = c(2010L, 
2011L, 2012L, 2013L, 2010L, 2011L, 2012L, 2013L, 2010L, 2011L, 
2012L, 2013L), key = structure(1:12, levels = c("FRA2010", "FRA2011", 
"FRA2012", "FRA2013", "ITA2010", "ITA2011", "ITA2012", "ITA2013", 
"USA2010", "USA2011", "USA2012", "USA2013"), class = "factor"), 
    potential = c(0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1)), row.names = c(NA, 
-12L), class = "data.frame")
r dataframe loops stata spline
1个回答
1
投票

试试这个。

split(df, df$country) |> sapply(\(x) {
  c(min=min(x[x$potential == 1, 'year']), mean=mean(x[x$potential == 1, 'year']))
}) |> t()
#      min     mean
# FRA 2013 2013.000
# ITA 2010 2011.333
# USA 2012 2012.500
© www.soinside.com 2019 - 2024. All rights reserved.