【问题标题】:How to calculate overall-mean for subsets in R如何计算 R 中子集的总体平均值
【发布时间】:2021-05-04 04:16:24
【问题描述】:

假设我有纵向数据(例如 21 个国家/地区的 5 年 gdp),其中包含 2 个相同规模的变量。数据排序如下

Country-year x1 x2
USA-1 50 2
USA-2 47 1.5
... ... ...
USA-5 52 1.9
UK-1 63 2
... ... ...
UK-5 41 3
... ... ...
n = 21
m = 5
N = n * m
set.seed(123)
x <- MASS::mvrnorm(N, rep(0,2), diag(2))

我想做两件事:

  • 首先,计算各个国家/地区的平均值
  • 其次,计算年平均值

对于第一个任务,我有以下代码

x_barbar <- NULL
k = 1
for(i in 1:n){
 x_barbar[i] <- mean(x[k:(k + (m - 1)), ])
 k = k + m
}

如何优化我的第一个任务的代码并找出一个代码来完成第二个任务?

感谢您的帮助。

【问题讨论】:

  • 你到底是什么意思?你想要奇数和偶数的列均值吗?我真的很难理解你想要什么
  • 你到底是什么意思?你想要奇数和偶数的列均值吗?我真的很难理解你想要什么。设置种子,然后手动做一个例子,只有 5 行,结果是预期的。
  • 抱歉回复晚了,我刚刚编辑了问题。我希望我的问题现在很清楚。请原谅我的英语。

标签: r


【解决方案1】:

如果你想计算奇/偶行的平均值,你可以使用向量循环。

mean_odd <- mean(x[c(TRUE, FALSE), ])
mean_even <- mean(x[c(FALSE, TRUE), ])

对于更新后的数据集,我们可以将国家和年份列分开并计算平均值。

library(dplyr)
library(tidyr)

data <- df %>% separate(`Country-year`, c('Country', 'Year'), sep = '-') 

country_mean <- data %>% group_by(Country) %>% summarise(across(c(x1, x2), mean))

year_mean <- data %>% group_by(Year) %>%summarise(across(c(x1, x2), mean))

【讨论】:

  • 感谢您的回复!我刚刚更新了我的问题以使其清楚。请看一看。
  • @MOHAMMED 对于您更新的问题,我认为如果我们将年份和国家/地区值分开在不同的列中会更容易。看。我更新的答案。
【解决方案2】:

您所要做的就是使用tapply

以第一种情况为例

tapply(x, (row(x)+1)%/%2, mean)

对于第二种情况:

tapply(x, row(x)%%2, mean)

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2020-12-15
    • 2016-11-14
    • 2016-03-05
    相关资源
    最近更新 更多