gpt4 book ai didi

r - 使用 dplyr 和连接生成唯一 ID 和组 ID

转载 作者:行者123 更新时间:2023-12-03 16:06:09 25 4
gpt4 key购买 nike

我有一个问题,我怀疑是由 dplyr 引起的。更新结合我的 hacky 代码。给定一个每行都重复的数据框,我想通过将两列的条目与中间的“_”或“a_”组合起来,为每一行分配一个唯一的 id。我还想通过将一列的条目与“”或“a”组合来分配组 ID。因为这些格式对于与另一个数据框对齐很重要,所以我不能使用基于 interact 的解决方案。和 factor我在其他帖子中看到的。

所以我想从这个开始:

   Generation Identity
1 1 X
2 1 Y
3 1 Z
4 2 X
5 2 Y
6 2 Z
7 3 X
8 3 Y
9 3 Z
10 1 X
11 1 Y
12 1 Z
13 2 X
14 2 Y
15 2 Z
16 3 X
17 3 Y
18 3 Z

对此:
   Generation Identity Unique_id Group_id
1 1 X 1_X X
2 1 Y 1_Y Y
3 1 Z 1_Z Z
4 2 X 2_X X
5 2 Y 2_Y Y
6 2 Z 2_Z Z
7 3 X 3_X X
8 3 Y 3_Y Y
9 3 Z 3_Z Z
10 1 X 1a_X Xa
11 1 Y 1a_Y Ya
12 1 Z 1a_Z Za
13 2 X 2a_X Xa
14 2 Y 2a_Y Ya
15 2 Z 2a_Z Za
16 3 X 3a_X Xa
17 3 Y 3a_Y Ya
18 3 Z 3a_Z Za

下面的最小示例基于以前为我和其他人设置唯一 ID 的代码,但现在导致 RStudio 因段错误而崩溃(异常类型:EXC_BAD_ACCESS (SIGSEGV))。当我调用包含此代码的函数时,它会生成消息

Error in match(vector, df$Unique_id) : 'translateCharUTF8' must be called on a CHARSXP



我读过的可能是内存问题的症状。
library(dplyr)
dff <- data.frame(Generation = rep(1:3, each = 3),
Identity = rep(LETTERS[24:26], times = 3))
dff <- rbind(dff, dff) # duplicate rows
dff <- group_by_(dff, ~Generation, ~Identity) %>%
mutate(Unique_id = c(paste0(Identity[1], "_", Generation[1]), paste0(Identity[1], "a", "_", Generation[1]))) %>%
ungroup

我认为问题与 dplyr 的更新有关(我在 OSX Sierra 上使用最新版本的 RStudio 和所有软件包)。无论如何,我上面的解决方案有点像 hack。我非常感谢改进代码的建议,最好使用基本 R 或 dplyr(因为代码是当前依赖于 dplyr 的包的一部分)。

最佳答案

以下是解决问题的方法:

首先找到数据的重复项。我调用了我的数据 A

 dup=duplicated(A)

然后添加一个计数器行:
 A$count=1:nrow(A)
n=ncol(A)#THE COLUMN ADDED

现在获取所需的两列并将其与原始数据框 cbind:
     B=data.frame(t(apply(A,1,function(x)
if(dup[as.numeric(x[n])]) c(paste0(x["Identity"],"a"),paste(x[-n],collapse="a_"))
else c(x["Identity"],paste(x[-n],collapse="_")))))

`names<-`(cbind(A[-n],B),c(names(A[-1]),"Group_ID","Unique_ID"))
Identity count Group_ID Unique_ID
1 1 X X 1_X
2 1 Y Y 1_Y
3 1 Z Z 1_Z
4 2 X X 2_X
5 2 Y Y 2_Y
6 2 Z Z 2_Z
7 3 X X 3_X
8 3 Y Y 3_Y
9 3 Z Z 3_Z
10 1 X Xa 1a_X
11 1 Y Ya 1a_Y
12 1 Z Za 1a_Z
13 2 X Xa 2a_X
14 2 Y Ya 2a_Y
15 2 Z Za 2a_Z
16 3 X Xa 3a_X
17 3 Y Ya 3a_Y
18 3 Z Za 3a_Z

关于r - 使用 dplyr 和连接生成唯一 ID 和组 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45948366/

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