gpt4 book ai didi

r - 为 R 中两列之间的每个匹配值对添加一个唯一 ID

转载 作者:行者123 更新时间:2023-12-04 14:31:46 27 4
gpt4 key购买 nike

我想在下面的简单示例中为列 n1 和 n2 中的每对唯一值添加一个唯一 ID:

示例数据:

>dput(df)
structure(list(n1 = c(5L, 7L, 3L, 9L, 2L, 2L, 4L), y1 = c(1L,
1L, 2L, 1L, 1L, 1L, 3L), n2 = c(7L, 5L, 4L, 2L, 4L, 4L, 2L),
y2 = c(1L, 3L, 1L, 2L, 2L, 3L, 2L)), .Names = c("n1", "y1",
"n2", "y2"), class = "data.frame", row.names = c(NA, -7L))

>head(df)
n1 y1 n2 y2
1 5 1 7 1
2 7 1 5 3
3 3 2 4 1
4 9 1 2 2
5 2 1 4 2
6 2 1 4 3

使用下面的代码,我可以根据 n1 列中相对于 n2 列的值的组合添加一个唯一的对 id,但这并没有考虑 n1 和 n2 中的两个值具有相同组合但两列顺序颠倒。例如在下面的示例中,最后三行中的对组合是相同的,但由于值的顺序在最后一行中翻转,函数假定它们是不同的对组合)。

> dfn = transform(df, pairid = as.numeric(interaction(n1, n2, drop=TRUE)))

> dfn
n1 y1 n2 y2 pairid
1 5 1 7 1 6
2 7 1 5 3 5
3 3 2 4 1 4
4 9 1 2 2 2
5 2 1 4 2 3
6 2 1 4 3 3
7 4 3 2 2 1

我想要的输出如下。

  n1 y1 n2 y2 pairid
1 5 1 7 1 4
2 7 1 5 3 4
3 3 2 4 1 3
4 9 1 2 2 2
5 2 1 4 2 1
6 2 1 4 3 1
7 4 3 2 2 1

最佳答案

首先计算两个值中的较小者,称之为m1。然后将两者中较大的一个称为 m2。然后应用您的互动技巧:

df$pairid <- with(df, {m1 = ifelse(n1 < n2, n1, n2);
m2 = ifelse(n1 < n2, n2, n1);
return(as.numeric(interaction(m1, m2, drop=TRUE)))})

给予

> df
n1 y1 n2 y2 pairid
1 5 1 7 1 3
2 7 1 5 3 3
3 3 2 4 1 2
4 9 1 2 2 4
5 2 1 4 2 1
6 2 1 4 3 1
7 4 3 2 2 1

关于r - 为 R 中两列之间的每个匹配值对添加一个唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585901/

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