我有一个包含四个变量的数据帧

data2=data.frame(ths= c("Bu1", "Bu2", "Bu3", "Bu4"), ph=c("na", "na", "na", "na", "a", "a", "a", "a", "u", "u", "u", "u"), nca=c(56, 78, 34, 67, 43, 23, 24, 12, 76, 79, 56, 67), ca=c(29, 7, 51, 18, 13, 33, 32, 44, 4, 1, 23, 13))

> data2
   ths ph nca ca
1  Bu1 na  56 29
2  Bu2 na  78  7
3  Bu3 na  34 51
4  Bu4 na  67 18
5  Bu1  a  43 13
6  Bu2  a  23 33
7  Bu3  a  24 32
8  Bu4  a  12 44
9  Bu1  u  76  4
10 Bu2  u  79  1
11 Bu3  u  56 23
12 Bu4  u  67 13

对于每个TH值(Bu1、Bu2、Bu3、Bu4),我想基于此数据帧创建一个矩阵,其中每行对应于ph组合数据的行号

  • BU1与BU1
  • BU1与BU1
  • BU1与BU1
  • Bu2与Bu2 a
  • Bu2与Bu2
  • Bu2与Bu2
  • Bu3 na与Bu3 a
  • Bu3与Bu3
  • Bu3与Bu3
  • Bu4 na对Bu4 a
  • Bu4与Bu4
  • Bu4与Bu4

它将导致这样的输出

> output2
      [,1] [,2]
 [1,]    1    5
 [2,]    1    9
 [3,]    5    9
 [4,]    2    6
 [5,]    2   10
 [6,]    6   10
 [7,]    3    7
 [8,]    3   11
 [9,]    7   11
[10,]    4    8
[11,]    4   12
[12,]    8   12

在另一个例子中,我有第二个更简单的数据帧,我想创建一个包含所有这些数据帧的矩阵,我使用了下面的代码行.我们的 idea 是为data2提供类似的东西.在这种情况下,我没有成功地找到一个方法来做这件事.

data1=data.frame(ths= c("Bu1", "Bu2", "Bu3", "Bu4"), nca=c(56, 78, 34, 67), ca=c(29, 7, 51, 18))

> data1
  ths nca ca
1 Bu1  56 29
2 Bu2  78  7
3 Bu3  34 51
4 Bu4  67 18

outpu1 = t(combn(seq_along(data1$ths),2))

> outpu1
     [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    1    4
[4,]    2    3
[5,]    2    4
[6,]    3    4

推荐答案

您可以按组计算成对行号组合:

do.call(rbind, with(data2, tapply(seq_along(ths), ths, \(x) t(combn(x, 2)))))

      [,1] [,2]
 [1,]    1    5
 [2,]    1    9
 [3,]    5    9
 [4,]    2    6
 [5,]    2   10
 [6,]    6   10
 [7,]    3    7
 [8,]    3   11
 [9,]    7   11
[10,]    4    8
[11,]    4   12
[12,]    8   12

如果你喜欢dplyr:

library(dplyr)

data2 |>
  mutate(rn = row_number()) |>
  reframe(x = t(combn(rn, 2)), .by = ths) |>
  pull(x)

      [,1] [,2]
 [1,]    1    5
 [2,]    1    9
 [3,]    5    9
 [4,]    2    6
 [5,]    2   10
 [6,]    6   10
 [7,]    3    7
 [8,]    3   11
 [9,]    7   11
[10,]    4    8
[11,]    4   12
[12,]    8   12

R相关问答推荐

使用ggplot 2根据R中的类别排列Likert比例gplot

从有序数据中随机抽样

R Highcharts与两个位置关联的注释

我不能在docker中加载sf

IMF IFS数据以R表示

在ggplot2的框图中绘制所有级别的系数

安全地测试文件是否通过R打开

根据约束随机填充向量的元素

使用shiny 中的所选要素行下拉菜单

将工作目录子文件夹中的文件批量重命名为顺序

我是否可以使用多个变异项来构建顺序列(标记多个问题)

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

隐藏基于 case 总数的值

通过比较来自多个数据框的值和R中的条件来添加新列

为什么R列名称忽略具有指定名称的向量,而只关注索引?

使用卡环从R中的列中删除单位(&C)

如何修复geom_rect中的层错误?

基于已有ID列创建唯一ID

臭虫?GradeThis::grade_this_code()在`-code-check`块中失败

只有当我在循环的末尾放置一条print语句时,Foreach才会给出预期的输出