gpt4 book ai didi

r - 用R中的重复键匹配两个数据帧

转载 作者:行者123 更新时间:2023-12-05 01:04:44 25 4
gpt4 key购买 nike

我想根据它们的 ID 匹配两个数据框,并将重复的选择附加到一个列表中。我拥有的数据框示例如下:

df1 = data.frame(ID = c("A", "B", "C", "D"), count = c(4, 6, 7, 8))
df2 = data.frame(ID = c("A", "B", "C", "D"), direction = c("up", "down", "up", "up"), reference = c(38, 39, 40, 40))

这两个数据框看起来像这样:

<头>
身份证 计数
一个 4
B 6
C 7
D 8
<头>
身份证 方向 引用
一个 向上 38
一个 向下 39
C 向上 40
D 向上 40

基本上,我希望最终结果看起来像这样,其中来自 df2 的信息可以与 df1 合并,但将详细信息连接到一个列表中,如果在 df2 中找到多个对应条目,它们可以存储为列表列表:

<头>
身份证 计数 信息
一个 4 c(上 = 38, 下 = 39)
B 6 不适用
C 7 c(向上 =40)
D 8 c(向上 =40)

我曾尝试合并两个数据框,但这会导致多个条目作为新行重复。我正在考虑尝试解析第二个数据框以进行匹配,就像我之前对数据库环境所做的那样,但如果您能让我知道如何使用数据框而不是环境来做到这一点,我将不胜感激。当然,如果有更有效的方法来解决这个问题,那也将不胜感激!我将 df1 匹配到数据库环境的示例:

i=1
for (row in 1:nrow(df)){
tmp <- paste(df$ID[i])
tmp2 <- as.list(mget(tmp, mirbaseID2ACC, ifnotfound = NA))
if (is.na(tmp2) == TRUE) {
tmp <- paste(df$simpleID[i])
tmp2 <- as.list(mget(tmp, mirbaseID2ACC, ifnotfound = NA))
}
if (i<(nrow(df)+1)) {
df$ACCESSION[i] <- tmp2
i=i+1
}
}

*请注意,“简单”列用于实际数据帧,因为样本具有非常特定的 ID(即 A-ab-2),但出于本示例的目的,我们可以假设 ID 本身是很简单,可以用我正在尝试的数据框检测到

最佳答案

你可以group_byID列,然后summarisedirectionreference 列到列表中(使用 df3$info 查看列表)和 left_joindf1

library(dplyr)

df3 <- left_join(df1,
df2 %>%
group_by(ID) %>%
summarize(info = list(paste(direction, "=", reference))),
by = "ID")

ID count info
1 A 4 up = 38, down = 39
2 B 6 NULL
3 C 7 up = 40
4 D 8 up = 40

df3$info
[[1]]
[1] "up = 38" "down = 39"

[[2]]
NULL

[[3]]
[1] "up = 40"

[[4]]
[1] "up = 40"

关于r - 用R中的重复键匹配两个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71568499/

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