我是R新手,除了其他方面,我还在努力学习一些术语。但我的顾问希望我简化他现在研究中非常繁琐的例程。
我们的数据分为2个城市,一个有5个人,一个有4个,每个发言者每个变量有110到112个数据点,共有21个变量。 (因此在Excel中,有一列用于城市,一列用于人,一列用于21个变量。)我们只是试图用平均值,中位数,stdev,过度峰度和偏度来描述数据。我们也在使用shapiro.test。
现在,我们为每个人定义一个对象,并在该对象的一列上运行每个函数,但这需要太长时间。 我如何只为一位演讲者测试每个变量的列?我已经阅读了关于apply系列和for循环的内容,但我似乎无法让它们为我工作 - - 我可能缺乏术语。
如果有帮助,这些城市会被标记为Erie和Rice,而发言者只是Erie1,Erie2,Rice 1等。
谢谢!
P.S。如果可能的话,我真的很高兴知道如何将可复制和粘贴的结果导入Excel,因为我们仍在复制和粘贴单个功能结果。
答案 0 :(得分:1)
您正在寻找的功能可能是
tapply
或者
aggregate
像
这样的东西DF=data.frame(Cities,Speakers,Var1,Var2,...,Varn)
这是您的data.frame,Var1到Varn是您要查找的20个变量。
我将使用shapiro.test,这可能更复杂:
T = aggregate(DF$Var1,by=list(DF$Cities),FUN=shapiro.test)
你可以通过City + Speaker
的组合获得shapiro测试T = aggregate(DF$Var1,by=list(DF$Cities,DF$Speaker),FUN=shapiro.test)
试试并告诉我们!
答案 1 :(得分:0)
以下代码创建了一个我认为与您相似的数据集:
library(dplyr)
nobs = 2 * 5 * 110
dat = data.frame(city = sample(c('Erie', 'Rice'), nobs, replace = TRUE)) %>%
mutate(speaker = paste0(city, sample(1:5, nobs, replace = TRUE))) %>%
arrange(city, speaker)
data_matrix = matrix(runif(21 * nobs), nobs, 21)
colnames(data_matrix) = sprintf('Var%d', 1:21)
dat = as.data.frame(cbind(dat, data_matrix))
接下来,我们可以使用dplyr
分割每个唯一城市/演讲者组合的数据。我们使用便捷函数summarise_each
一次应用多个函数:
dat %>% group_by(city, speaker) %>% summarise_each(funs(mean, sd, median), Var1:Var21)
Source: local data frame [10 x 65]
Groups: city [?]
city speaker Var1_mean Var2_mean Var3_mean Var4_mean Var5_mean Var6_mean
(fctr) (chr) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
1 Erie Erie1 0.5028917 0.5069724 0.4720252 0.5462675 0.5021429 0.5134384
2 Erie Erie2 0.5378896 0.5151194 0.5429039 0.5159513 0.4622817 0.5328961
3 Erie Erie3 0.4767338 0.4752459 0.5210605 0.4467936 0.4967070 0.4934170
4 Erie Erie4 0.4752356 0.5497244 0.5010823 0.4944027 0.5000894 0.4926613
5 Erie Erie5 0.5187913 0.5090330 0.4960665 0.5002147 0.4679352 0.5181322
6 Rice Rice1 0.5237725 0.4987702 0.4989190 0.5655607 0.5295775 0.5155883
7 Rice Rice2 0.5043830 0.4851659 0.5363700 0.5089221 0.5155034 0.5116563
8 Rice Rice3 0.4701997 0.4877534 0.5037869 0.5250760 0.4662257 0.5158385
9 Rice Rice4 0.4920601 0.5390394 0.5033235 0.5214137 0.4796411 0.5298566
10 Rice Rice5 0.4922858 0.4702580 0.4977153 0.4571975 0.5128249 0.4979027
Variables not shown: Var7_mean (dbl), Var8_mean (dbl), Var9_mean (dbl),
Var10_mean (dbl), Var11_mean (dbl), Var12_mean (dbl), Var13_mean (dbl),
Var14_mean (dbl), Var15_mean (dbl), Var16_mean (dbl), Var17_mean (dbl),
Var18_mean (dbl), Var19_mean (dbl), Var20_mean (dbl), Var21_mean (dbl),
Var1_sd (dbl), Var2_sd (dbl), Var3_sd (dbl), Var4_sd (dbl), Var5_sd (dbl),
Var6_sd (dbl), Var7_sd (dbl), Var8_sd (dbl), Var9_sd (dbl), Var10_sd (dbl),
Var11_sd (dbl), Var12_sd (dbl), Var13_sd (dbl), Var14_sd (dbl), Var15_sd
(dbl), Var16_sd (dbl), Var17_sd (dbl), Var18_sd (dbl), Var19_sd (dbl),
Var20_sd (dbl), Var21_sd (dbl), Var1_median (dbl), Var2_median (dbl),
Var3_median (dbl), Var4_median (dbl), Var5_median (dbl), Var6_median (dbl),
Var7_median (dbl), Var8_median (dbl), Var9_median (dbl), Var10_median (dbl),
Var11_median (dbl), Var12_median (dbl), Var13_median (dbl), Var14_median
(dbl), Var15_median (dbl), Var16_median (dbl), Var17_median (dbl),
Var18_median (dbl), Var19_median (dbl), Var20_median (dbl), Var21_median
(dbl)
此方法的缺点是我们在输出number_of_vars
中获得number_of_summary_functions
次data.frame
个变量。或者,我们可以使用tidyr
将数据从宽格式组织为长格式。然后我们使用dplyr
来获得结果:
library(tidyr)
dat %>% gather(variable, value, -city, -speaker) %>%
group_by(city, speaker, variable) %>%
summarise_each(funs(mean, sd, median), value)
Source: local data frame [210 x 6]
Groups: city, speaker [?]
city speaker variable mean sd median
(fctr) (chr) (fctr) (dbl) (dbl) (dbl)
1 Erie Erie1 Var1 0.5531500 0.2836093 0.5969408
2 Erie Erie1 Var2 0.4776046 0.3118265 0.4591285
3 Erie Erie1 Var3 0.5256391 0.2927646 0.5126190
4 Erie Erie1 Var4 0.4732230 0.2810146 0.4556239
5 Erie Erie1 Var5 0.4647291 0.2932984 0.4461107
6 Erie Erie1 Var6 0.5062291 0.2924258 0.5132119
7 Erie Erie1 Var7 0.4815738 0.2928289 0.4526164
8 Erie Erie1 Var8 0.4920858 0.2976184 0.5169642
9 Erie Erie1 Var9 0.4900656 0.2793954 0.4935924
10 Erie Erie1 Var10 0.4626460 0.2807313 0.4608666
.. ... ... ... ... ... ...
这增加了一个对变量进行编码的附加变量,以及每个汇总函数的变量。