需要在一个数据集上制作多个列联表

问题描述

我正在尝试从以下数据集中制作多个列联表。

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

我想为每个小费组合和每个底池值获取一张表格

我看到了一些方法可以使用暗示组合函数和交叉表函数函数来做到这一点,但没有成功地将这些函数应用于我的数据。

我需要关于这个问题的帮助。

帕特里克

解决方法

我是这样做的:

data=data.frame(TIP=c("PA1","LAY2","MAT1","STU","PA1","STU"),timeA=c(7,16,37,8,5,13,15,28,23,17,16),TimeB=c(2,9,7,12,24,21,15),pot=c("S1","S1","S2","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],data[data$new==i[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],c[i[2],2:3]))
}
assign(paste0('res',j),apply(b,f))
}

这里有 3 个对应于 3 个底池值的列表

我希望这是你想要的