【发布时间】:2020-10-31 22:39:05
【问题描述】:
在按国家/地区将数据框拆分为多个数据框后,我希望能够计算我拆分的每个国家/地区数据框中列集中的平均值。我使用了有效的tapply,我尝试使用 sapply() 但奇怪的是该国家的所有平均值都遵循第一个国家的平均值。我不知道为什么,我被要求使用 sapply 作为练习,所以我想知道如何改进我的代码。任何指针将不胜感激。 (这可能是一个愚蠢的错误)
输入/我的代码:
strikes.df = read.csv("http://www.stat.cmu.edu/~pfreeman/strikes.csv")
strikes.by.country=split(strikes.df,strikes.df$country)
my.fun=function(x=strikes.by.country){
l=length(strikes.by.country)
for (i in 1:l){
return(strikes.by.country[[i]]$centralization %>% mean)
}
}
sapply(strikes.by.country, my.fun)
#using tapply()
tapply(strikes.df[,"centralization",],INDEX=strikes.df[,"country",],FUN=mean)
输出
0.374644 0.374644 0.374644 0.374644 0.374644
Finland France Germany Ireland Italy
0.374644 0.374644 0.374644 0.374644 0.374644
Japan Netherlands New.Zealand Norway Sweden
0.374644 0.374644 0.374644 0.374644 0.374644
Switzerland UK USA
0.374644 0.374644 0.374644
Australia Austria Belgium Canada Denmark
0.374644022 0.997670495 0.749485177 0.002244134 0.499958552
Finland France Germany Ireland Italy
0.750374065 0.002729909 0.249968231 0.499711882 0.250699502
Japan Netherlands New.Zealand Norway Sweden
0.124675342 0.749602699 0.375940378 0.875341821 0.875253817
Switzerland UK USA
0.499990005 0.375946785 0.002390639
在使用 split 后,我得到了使用 sapply 的指令;这就是为什么我唯一想到的就是使用 for 循环。
【问题讨论】:
-
您能否使用
dput()在问题中提供一些数据?此外,您在函数中定义变量x,但您不在函数体中使用它,您继续使用拆分数据框的名称。
标签: r function dataframe matrix apply