R按三个变量分组汇总数据
我想通过移植实验数据总结得出a)每个位置、底物和复制组合的总个体数和b)按性别划分的总个体数。我提供了一个简化的数据集,每个站点、基质和复制组合有两个记录。我知道如何在R中创建列联表,但不确定如何创建一个表(dataframe),在该表中我总结了三个变量的数据R按三个变量分组汇总数据,r,crosstab,summary,R,Crosstab,Summary,我想通过移植实验数据总结得出a)每个位置、底物和复制组合的总个体数和b)按性别划分的总个体数。我提供了一个简化的数据集,每个站点、基质和复制组合有两个记录。我知道如何在R中创建列联表,但不确定如何创建一个表(dataframe),在该表中我总结了三个变量的数据 Transplant.Test <- structure(list(Location = c("Kampinge", "Kampinge", "Kampinge", "Kampinge",
Transplant.Test <- structure(list(Location = c("Kampinge", "Kampinge", "Kampinge", "Kampinge",
"Kampinge", "Kampinge", "Kampinge", "Kampinge",
"Kampinge", "Kampinge", "Kampinge", "Kampinge",
"Kaseberga", "Kaseberga", "Kaseberga",
"Kaseberga", "Kaseberga", "Kaseberga",
"Kaseberga", "Kaseberga", "Kaseberga",
"Kaseberga", "Kaseberga", "Kaseberga"),
Substrate = c("Kampinge", "Kampinge", "Kampinge", "Kampinge",
"Kampinge", "Kampinge", "Kaseberga","Kaseberga",
"Kaseberga", "Kaseberga", "Kaseberga",
"Kaseberga", "Kampinge", "Kampinge",
"Kampinge", "Kampinge", "Kampinge", "Kampinge",
"Kaseberga", "Kaseberga", "Kaseberga",
"Kaseberga", "Kaseberga", "Kaseberga"),
Replicate = c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L,
1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L),
Sex = c("m", "m", "m", "m", "m", "m", "m", "m", "m", "m", "m",
"m", "m", "f", "f", "f", "m", "f", "f", "f", "f", "f",
"m", "m")),
.Names = c("Location", "Substrate", "Replicate", "Sex"),
class = "data.frame", row.names = c(NA, -24L))
Transplant.Test您可能对“重塑2”中的dcast
感兴趣
请尝试以下操作:
library(reshape2)
dcast(Transplant.Test, Location + Substrate + Replicate ~ "count",
value.var="Sex", fun.aggregate=length)
# Location Substrate Replicate count
# 1 Kampinge Kampinge 1 2
# 2 Kampinge Kampinge 2 2
# 3 Kampinge Kampinge 3 2
# 4 Kampinge Kaseberga 1 2
# 5 Kampinge Kaseberga 2 2
# 6 Kampinge Kaseberga 3 2
# 7 Kaseberga Kampinge 1 2
# 8 Kaseberga Kampinge 2 2
# 9 Kaseberga Kampinge 3 2
# 10 Kaseberga Kaseberga 1 2
# 11 Kaseberga Kaseberga 2 2
# 12 Kaseberga Kaseberga 3 2
dcast(Transplant.Test, Location + Substrate + Replicate ~ Sex,
value.var="Sex", fun.aggregate=length)
# Location Substrate Replicate f m
# 1 Kampinge Kampinge 1 0 2
# 2 Kampinge Kampinge 2 0 2
# 3 Kampinge Kampinge 3 0 2
# 4 Kampinge Kaseberga 1 0 2
# 5 Kampinge Kaseberga 2 0 2
# 6 Kampinge Kaseberga 3 0 2
# 7 Kaseberga Kampinge 1 1 1
# 8 Kaseberga Kampinge 2 2 0
# 9 Kaseberga Kampinge 3 1 1
# 10 Kaseberga Kaseberga 1 2 0
# 11 Kaseberga Kaseberga 2 2 0
# 12 Kaseberga Kaseberga 3 0 2
require(plyr)
Table_A你能举一个预期结果的例子吗?第一个问题听起来像你只是想要data.frame(table(Transplant.Test[1:3])
,还是我误解了这个问题?还是你在寻找ftable
ftable(Transplant.Test,row.vars=c(“位置”、“基质”、“复制”),col.vars=“性别”)
您的第一个解决方案工作正常,但第二个解决方案需要额外的步骤才能获得每种性别的列。