我有一个数据框列表,如下所示:
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]]))) 只是为了看看我是否可以重复它,但缺少一些东西。
这听起来像是来自平面数据框的连接。
给出:(比您的示例更短以显示完整输出)
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