R 需要在数据集上创建多个列联表

R 需要在数据集上创建多个列联表,r,contingency,R,Contingency,我试图从以下数据集中生成多个列联表 data=data.frame(TIP=c("PA1", "LAY2", "MAT1", "STU", "PA1", "LAY2", "MAT1", "STU","PA1", "LAY2", "MAT1", "STU"),

我试图从以下数据集中生成多个列联表

data=data.frame(TIP=c("PA1", "LAY2", "MAT1", "STU", "PA1", "LAY2", "MAT1", "STU","PA1", "LAY2", "MAT1", "STU"), timeA=c(7,16,37,8,5,13,15,28,23,17,5,16), TimeB=c(2,17,23,13,9,7,8,12,24,21,8,15), pot=c("S1","S1","S1","S1", "S2", "S2","S2", "S2", "S3", "S3","S3", "S3"))

    TIP timeA TimeB pot
1   PA1     7     2  S1
2  LAY2    16    17  S1
3  MAT1    37    23  S1
4   STU     8    13  S1
5   PA1     5     9  S2
6  LAY2    13     7  S2
7  MAT1    15     8  S2
8   STU    28    12  S2
9   PA1    23    24  S3
10 LAY2    17    21  S3
11 MAT1     5     8  S3
12  STU    16    15  S3

    

我想要的输出是

    timeA TimeB
PA1      7     2
LAY2    16    17

我想为每个TIP组合和每个pot值得到一张表

我看到了一些方法来实现这一点,其中包含combn函数和crosstable函数,但没有成功地将这些函数应用到我的数据中

在这个问题上我需要一些帮助

帕特里克

我这样做了:

data=data.frame(TIP=c("PA1", "LAY2", "MAT1", "STU", "PA1", "LAY2", "MAT1", "STU","PA1", "LAY2", "MAT1", "STU"), timeA=c(7,16,37,8,5,13,15,28,23,17,5,16), TimeB=c(2,17,23,13,9,7,8,12,24,21,8,15), pot=c("S1","S1","S1","S1", "S2", "S2","S2", "S2", "S3", "S3","S3", "S3"))
b = combn(1:nrow(data),2)

f = function(i){
  return(rbind(data[i[1],2:3],data[i[2],2:3]))
}
res =apply(b, 2, f)
结果是一个包含所有列联表的列表

如果您想跟踪与我所做的组合相对应的罐:

data$new= paste(data$TIP,data$pot,sep='_')

b = combn(data$new,2)

f = function(i){
  return(rbind(data[data$new==i[1],2:3],data[data$new==i[2],2:3]))
}
res =apply(b, 2, f)
names(res)=paste(b[1,],b[2,])
for(j in unique(data$pot)){c = data[data$pot==j,]
b = combn(1:nrow(c),2)

f = function(i){
  return(rbind(c[i[1],2:3],c[i[2],2:3]))
}
assign(paste0('res', j),apply(b, 2, f))
}
如果你想用pot值来计算,我会这样做:

data$new= paste(data$TIP,data$pot,sep='_')

b = combn(data$new,2)

f = function(i){
  return(rbind(data[data$new==i[1],2:3],data[data$new==i[2],2:3]))
}
res =apply(b, 2, f)
names(res)=paste(b[1,],b[2,])
for(j in unique(data$pot)){c = data[data$pot==j,]
b = combn(1:nrow(c),2)

f = function(i){
  return(rbind(c[i[1],2:3],c[i[2],2:3]))
}
assign(paste0('res', j),apply(b, 2, f))
}
在这里,您可以得到与3个pot值对应的3个列表


我希望这是您想要的

谢谢,这几乎是完美的!!我认为,有太多的比较,因为我想比较两个两个,但在一个相同的值为锅。是否有方法将信息链接到表中(了解每个表的哪个提示被比较,哪些提示与pot相关),更正是否更好?或者你想要所有的组合?好的,我做了另一个修正,这就是你想要的吗?