将rep()与data.frames或向量一起使用的方法?

问题描述 投票:0回答:1

我有一个数据框列表,如下所示:

dflist:
[[12]]
label         site
   <chr>        <int>
 [1] NODE_0000138    12
 [2] NODE_0000222    12
 [3] NODE_0000205    12
 [4] NODE_0000241    12
 [5] 061D03KR01      12
 [6] 061D03KR03      12

[[15]]
label         site
  <chr>        <int>
[1] NODE_0000203    15
[2] 061D03OR17      15
[3] 061D03OR19      15
[4] 061D03UR28      15

[[18]]
label         site
   <chr>        <int>
 [1] NODE_0000181    18
 [2] NODE_0000226    18
 [3] 061D03KR11      18
 [4] 061D03OR02      18
 [5] 061D03OR32      18`

我还有一个包含信息的数据框:

df
  from to
1   12 18
2   12 35
3   15 18

我一直在尝试创建新的 data.frame 的方法,以便根据 df 行重复值。

df 第一行是

from to
1   12 18

所以,我想从listdf中获取12和18的所有可能组合:

NODE_0000138    12    NODE_0000181    18
NODE_0000138    12    NODE_0000226    18
NODE_0000138    12    061D03KR11      18
NODE_0000138    12    061D03OR02      18
NODE_0000138    12    061D03OR32      18

NODE_0000222    12    NODE_0000181    18
NODE_0000222    12    NODE_0000226    18
NODE_0000222    12    061D03KR11      18
NODE_0000222    12    061D03OR02      18
NODE_0000222    12    061D03OR32      18

NODE_0000205    12    NODE_0000181    18
NODE_0000205    12    NODE_0000226    18
NODE_0000205    12    061D03KR11      18
NODE_0000205    12    061D03OR02      18
NODE_0000205    12    061D03OR32      18`

... ...

对于所有 df 行,依此类推。我想过一个 for 循环,但它变得混乱。还有其他想法吗??

谢谢!!!

我也一直在玩rep,rep_along,但我无法让它重复我需要的次数。

我也尝试过 c(rep(data.frame(c(dflist[[1]][1],dflist[[1]][2])), nrow(dflist[[1]]))) 只是为了看看我是否可以重复它,但缺少一些东西。

r dataframe repeat
1个回答
0
投票

这听起来像是来自平面数据框的连接。

给出:(比您的示例更短以显示完整输出)

dflist <- list(data.frame(label = letters[1:3], site = 12),
     data.frame(label = letters[7:10], site = 15),
     data.frame(label = letters[11:13], site = 18))

df <- data.frame(from = c(12, 15),
                 to = c(18, 18))

我们可以制作列表的平面版本:

library(dplyr)
dfs <- dflist |>
  bind_rows() 

然后根据

from
添加一次表格,然后再次从
to
:

df |>
  left_join(dfs, join_by(from == site)) |>
  left_join(dfs, join_by(to == site))

输出显示 12-18 的每个组合的一行,然后是 15-18 的每个组合的行:

   from to label.x label.y
1    12 18       a       k
2    12 18       a       l
3    12 18       a       m
4    12 18       b       k
5    12 18       b       l
6    12 18       b       m
7    12 18       c       k
8    12 18       c       l
9    12 18       c       m
10   15 18       g       k
11   15 18       g       l
12   15 18       g       m
13   15 18       h       k
14   15 18       h       l
15   15 18       h       m
16   15 18       i       k
17   15 18       i       l
18   15 18       i       m
19   15 18       j       k
20   15 18       j       l
21   15 18       j       m
© www.soinside.com 2019 - 2024. All rights reserved.