我真的希望这不是重复的,但我找不到适用于我的情况的答案。
我有面板数据,我需要按年计算平均得分。 我的数据看起来像这样
df <- data.frame(
"Country" = c("USA", "EU", "Africa","USA", "EU", "Africa","USA", "EU", "Africa"),
"Year" = c(1970, 1970, 1970, 1980, 1980, 1980,1990, 1990, 1990),
"Score" = runif(9, min=20, max=100),
"Other" = rnorm(9),
stringsAsFactors = FALSE)
我的目标是计算每年的平均值“分数”。换句话说,因此所有国家在1970年,1980年和1990年的平均收入水平都不同。
我尝试将其分组的操作,
mean<- df %>%
group_by(Year) %>%
summarise(mean(na.omit(df$Score)))
但是这些代码给了我分数的平均值,而不是每年的平均值
我也尝试使用ddply,但是由于某些原因,它似乎不起作用
mean2 <- ddply(.data = df, variables = .(Year), (mean(df$Score)))
有人会知道如何为我提供用于大型数据库的直观代码吗?
非常感谢
答案 0 :(得分:2)
问题是您使用了df$Score
而不是Score
;杀死了分组效应。相反,我们想要
df %>% group_by(Year) %>%
summarise(meanScore = mean(Score, na.rm = TRUE))
# A tibble: 3 x 2
# Year meanScore
# <dbl> <dbl>
# 1 1970 80.0
# 2 1980 69.9
# 3 1990 52.9
与ddply
相同:
ddply(df, .(Year), summarise, meanScore = mean(Score, na.rm = TRUE))
# Year meanScore
# 1 1970 80.02505
# 2 1980 69.92299
# 3 1990 52.87667
当然,您也可以在底数为R的情况下找到它,如
tapply(df$Score, df$Year, mean, na.rm = TRUE)
# 1970 1980 1990
# 80.02505 69.92299 52.87667