在R中获得分组结果
这里我有如下数据集。 在SAS系统中,为了在我所做的任何事情(如平均值、GLM或REG)中获得分组结果,我可以将其连接为:在R中获得分组结果,r,grouping,sas,anova,R,Grouping,Sas,Anova,这里我有如下数据集。 在SAS系统中,为了在我所做的任何事情(如平均值、GLM或REG)中获得分组结果,我可以将其连接为: proc sort; by B; proc glm; class A; model C=A; by B; run; 然后,我可以在B级或B级内获得GLM结果。 但是,我不知道如何在R系统中使用like'by'来分组。 您可能想建议我使用>subset(),但是,当您有10个级别的B时,这种连接将非常困难。 你可能想了解我,但不仅要了解方差分析,还要了解回归和平均值。 有人
proc sort; by B;
proc glm;
class A;
model C=A; by B;
run;
然后,我可以在B级或B级内获得GLM结果。
但是,我不知道如何在R系统中使用like'by'来分组。
您可能想建议我使用>subset(),但是,当您有10个级别的B时,这种连接将非常困难。
你可能想了解我,但不仅要了解方差分析,还要了解回归和平均值。
有人来帮我吗
raw data
A B C
a a 0.47
a b 0.88
a c 2.32
a d 3.26
a a 0.93
a b 1.86
a c 3.22
a d 0.92
a a 0.45
a b 0.92
a c 2.31
a d 3.24
b a 0.91
b b 1.84
b c 3.27
b d 0.86
b a 0.47
b b 0.90
b c 2.33
b d 3.19
b a 0.92
b b 1.84
b c 3.25
b d 0.93
c a 0.45
c b 0.92
c c 2.33
c d 3.08
c a 0.93
c b 1.86
c c 3.25
c d 0.93
c a 0.47
c b 0.90
c c 2.26
c d 3.09
也许聚合函数就是你要找的
aggregate(data$C, by=list(data$A), FUN=sum)
这将按第一列对数据进行分组,并将C列折叠为第一列中每个组的总和使数据集更易于导入R:
dat <-
structure(list(A = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("a",
"b", "c"), class = "factor"), B = structure(c(1L, 2L, 3L, 4L,
1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L,
1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L
), .Label = c("a", "b", "c", "d"), class = "factor"), C = c(0.47,
0.88, 2.32, 3.26, 0.93, 1.86, 3.22, 0.92, 0.45, 0.92, 2.31, 3.24,
0.91, 1.84, 3.27, 0.86, 0.47, 0.9, 2.33, 3.19, 0.92, 1.84, 3.25,
0.93, 0.45, 0.92, 2.33, 3.08, 0.93, 1.86, 3.25, 0.93, 0.47, 0.9,
2.26, 3.09)), .Names = c("A", "B", "C"), class = "data.frame", row.names = c(NA,
-36L))
同时从所有模型中提取信息遵循相同的范例:
> ldply(models, coefficients)
B (Intercept) Ab Ac
1 a 0.6166667 0.1500000 6.798700e-17
2 b 1.2200000 0.3066667 6.666667e-03
3 c 2.6166667 0.3333333 -3.333333e-03
4 d 2.4733333 -0.8133333 -1.066667e-01
基于@Brian Diggs的答案,但使用R基函数。我还使用了Brian的数据集
models <- lapply(split(dat, dat$B), function(x) glm(C~A, data=x))
do.call(rbind, lapply(models, function(y) y$coef))
(Intercept) Ab Ac
a 0.6166667 0.1500000 1.802585e-17
b 1.2200000 0.3066667 6.666667e-03
c 2.6166667 0.3333333 -3.333333e-03
d 2.4733333 -0.8133333 -1.066667e-01
模型非常感谢您,Brian,但我仍然想知道,当您导入数据集时,您可能需要连接read.table,因为您可以控制大量数据。有了你的建议,真的很感谢,但是,不容易控制大数据量。我真的不知道我问的是不是有脐带。@LimHyungwoo我想“脐带”不是你的意思。Brian为导入设置数据的方式非常适合制作一个简短、可复制的示例,因为它可以复制/粘贴到R中。参见@LimHyungwoo我也被“cord”搞糊涂了,但我展示的不是我通常如何将数据读取到R中。事实上,我在您提供的文本上使用了read.table
,以获得该data.frame。正如@shujaa所说,我将其包括在内是为了制作一个易于复制的示例(也就是说,为了快速回答特定问题,而不是花时间导入数据)。有关将数据导入R的方法,请参阅“R数据导入/导出”(随R提供或在网站上提供)。@BrianDiggs和shujaa,谢谢你们。你的主要建议是我可以使用plyr和Idply软件包。干杯,谢谢,这是非常清楚的。但是,你认为我能在那里找到p值吗?
> ldply(models, coefficients)
B (Intercept) Ab Ac
1 a 0.6166667 0.1500000 6.798700e-17
2 b 1.2200000 0.3066667 6.666667e-03
3 c 2.6166667 0.3333333 -3.333333e-03
4 d 2.4733333 -0.8133333 -1.066667e-01
models <- lapply(split(dat, dat$B), function(x) glm(C~A, data=x))
do.call(rbind, lapply(models, function(y) y$coef))
(Intercept) Ab Ac
a 0.6166667 0.1500000 1.802585e-17
b 1.2200000 0.3066667 6.666667e-03
c 2.6166667 0.3333333 -3.333333e-03
d 2.4733333 -0.8133333 -1.066667e-01
models <- lapply(split(dat, dat$B), function(x) glm(C~A, data=x)) #the same as above
Coef <- lapply(models, function(y) y$coef) # the same as above
Pval <- lapply(models, function(z) summary(z)$coefficients[, 'Pr(>|t|)'])
Result <- cbind(do.call(rbind, Coef), do.call(rbind, Pval))
colnames(Result)[4:6] <- paste('P.val', colnames(Result)[4:6])
Result
(Intercept) Ab Ac P.val (Intercept) P.val Ab P.val Ac
a 0.6166667 0.1500000 1.802585e-17 0.007088207 0.5167724 1.0000000
b 1.2200000 0.3066667 6.666667e-03 0.008446002 0.5191737 0.9886090
c 2.6166667 0.3333333 -3.333333e-03 0.000151772 0.4762936 0.9941859
d 2.4733333 -0.8133333 -1.066667e-01 0.016803317 0.4744404 0.9235623
models <- lapply(split(dat, dat$B), function(x) glm(C~A, data=x)) #the same as above
do.call(rbind, lapply(models, function(z) summary(z)$coefficients))
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.166667e-01 0.1540202 4.003804e+00 0.007088207
Ab 1.500000e-01 0.2178175 6.886500e-01 0.516772358
Ac 1.802585e-17 0.2178175 8.275668e-17 1.000000000
(Intercept) 1.220000e+00 0.3167661 3.851423e+00 0.008446002
Ab 3.066667e-01 0.4479749 6.845622e-01 0.519173660
Ac 6.666667e-03 0.4479749 1.488179e-02 0.988608995
(Intercept) 2.616667e+00 0.3103164 8.432253e+00 0.000151772
Ab 3.333333e-01 0.4388537 7.595545e-01 0.476293582
Ac -3.333333e-03 0.4388537 -7.595545e-03 0.994185937
(Intercept) 2.473333e+00 0.7538543 3.280917e+00 0.016803317
Ab -8.133333e-01 1.0661110 -7.628974e-01 0.474440418
Ac -1.066667e-01 1.0661110 -1.000521e-01 0.923562285