gpt4 book ai didi

r - 多列条件合并

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

我有两个数据表。我想将第二个 data.table 中的信息与第一个合并:

DT1 <- fread(
"Val C D E F iso year
1 NA 1 NA NA NLD 2001
1 NA 2 NA NA NLD 2002
1 NA 3 NA NA GRC 2001
1 NA 3 NA NA GRC 2002",
header = TRUE)

DT2 <- fread(
"Val name O P Q R iso year
1 A NA 1 NA NA NLD 2001
1 A NA 2 NA NA NLD 2001
1 B NA 1 NA NA NLD 2001
1 B NA 2 NA NA NLD 2002
1 A NA 1 NA NA NLD 2002
1 B NA 2 NA NA NLD 2002
1 C NA 3 NA NA GRC 2001
1 C NA 3 NA NA GRC 2001
1 C NA 3 NA NA GRC 2001
1 A NA 3 NA NA GRC 2002
1 A NA 3 NA NA GRC 2002
1 B NA 3 NA NA GRC 2002",
header = TRUE)

我想在 name下添加信息的 DT2DT1如下。如果为 iso == NLD姓名 A存在(无论多久),列 A 填充有 A,如果不存在,则保持 NA:
DT1 <- fread(
"Val C D E F iso year A B C
1 NA 1 NA NA NLD 2001 A B NA
1 NA 2 NA NA NLD 2002 A B NA
1 NA 3 NA NA GRC 2001 NA NA C
1 NA 3 NA NA GRC 2002 A B NA",
header = TRUE)

但我不知道如何到达那里。我一直在尝试类似的东西:
DT[,A:="A"]
DT[,B:="B"]
DT[,C:="C"]
DT2$name[DT, on=c(iso="iso", year="year", name="A"), nomatch=0L]

或者
merge(DT, DT2$name, on=c(iso="iso", year="year", A="name"), all.x = TRUE, allow.cartesian=FALSE)

但我认为必须以不同的方式解决它。谁能帮帮我?

最佳答案

在合并之前 reshape DT2,如下所示。我们还需要一步将计数更改为 A、B、C:

merge(DT1, dcast(DT2[, -c(3:6)], iso + year + Val ~ name),
by = c("iso", "year", "Val"))
# Using 'year' as value column. Use 'value.var' to override
# Aggregate function missing, defaulting to 'length'
# iso year Val C.x D E F A B C.y
# 1: GRC 2001 1 NA 3 NA NA 0 0 3
# 2: GRC 2002 1 NA 3 NA NA 2 1 0
# 3: NLD 2001 1 NA 1 NA NA 2 1 0
# 4: NLD 2002 1 NA 2 NA NA 1 2 0

关于r - 多列条件合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58858135/

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