gpt4 book ai didi

r - 给定一个带有 A 列的 R 数据框,如何创建两个包含 A 的所有有序组合的新列

转载 作者:行者123 更新时间:2023-12-04 22:36:02 24 4
gpt4 key购买 nike

我有一个带有一个 id 列(下面的 x)和一些变量(下面的 y1,y2)的 data.frame。

    x y1 y2
1 1 43 55
2 2 51 53
[...]

我想从中生成一个数据框,其中前两列涵盖 x 的每个有序组合(除非它们相等)以及与订单相关的每个变量的列。数据帧标题和前两行看起来像这样(手动完成,请原谅错误):
xi xj y1i y1j y2i y2j
1 2 43 51 55 53
2 1 51 43 53 55
[...]

因此,每一行都将包含一个源和目标(i 和 j),然后是每个源和目标处 y1 的值。

我正在慢慢学习 R 数据操作,但这个让我很难过。对一行全能答案以及更具可读性的教学答案表示赞赏。

最佳答案

这有效(除了订单)

firstdf  <- data.frame(x  = c( 1, 2, 4, 5), 
y1 = c(43,51,57,49), y2 = c(55,53,47,44))
co <- combn(firstdf$x,2)
seconddf <- data.frame(xi = c(co[1,], co[2,]), xj = c(co[2,], co[1,]))
thirddf <- merge(merge(seconddf, firstdf, by.x = "xj", by.y = "x" ),
firstdf, by.x = "xi", by.y = "x", suffixes = c("j", "i") )

生产
> thirddf
xi xj y1j y2j y1i y2i
1 1 2 51 53 43 55
2 1 5 49 44 43 55
3 1 4 57 47 43 55
4 2 4 57 47 51 53
5 2 1 43 55 51 53
6 2 5 49 44 51 53
7 4 5 49 44 57 47
8 4 1 43 55 57 47
9 4 2 51 53 57 47
10 5 1 43 55 49 44
11 5 2 51 53 49 44
12 5 4 57 47 49 44

第一行和第五行与您的示例相匹配。

如果你把 firstdf 作为给定并坚持一行,那么你可以把它变成
merge(merge(data.frame(xi = c(combn(firstdf$x,2)[1,], combn(firstdf$x,2)[2,]), xj = c(combn(firstdf$x,2)[2,], combn(firstdf$x,2)[1,])), firstdf, by.x = "xj", by.y = "x" ), firstdf, by.x = "xi", by.y = "x", suffixes = c("j", "i") )

但我真的不明白这一点

关于r - 给定一个带有 A 列的 R 数据框,如何创建两个包含 A 的所有有序组合的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com