gpt4 book ai didi

r - 两个列表与多列 data.frames 的条件匹配

转载 作者:行者123 更新时间:2023-12-01 23:24:27 25 4
gpt4 key购买 nike

我有一个 data.frames 列表,每个 data.frames 中有多个列。每个 data.frame 都具有相同的结构。此外,我还有另一个包含多个 data.frames 的列表。

假设这是两个列表:

firstlist <- list(a=data.frame(AA=5:1,
BB=1:5),
b=data.frame(AA=5:1,
BB=1:5),
c=data.frame(AA=5:1,
BB=1:5))
secondlist <- list(a=data.frame(AA=1:10,
BB=c(0,0,1,0,0,1,1,0,0,0)),
b=data.frame(AA=1:10,
BB=c(0,1,0,0,0,0,1,0,0,0)),
c=data.frame(AA=1:10,
BB=c(1,0,0,0,0,1,1,0,0,0)))

现在我想将 CC 列添加到 firSTList 中的所有 data.frames,并相应地将它们填充到 secondlist 的 BB 列中的值。

问题是:我需要检查 firSTList 中 AA 或 BB 中的行是否包含 secondlist 中 AA 的值,并用 secondlist 中 BB 中的值填充 firSTList 中的新列 CC。

上述示例数据的预期结果是:

> firstlist
$a
AA BB CC
1 5 1 0
2 4 2 0
3 3 3 1
4 2 4 0
5 1 5 0

$b
AA BB CC
1 5 1 0
2 4 2 1
3 3 3 0
4 2 4 1
5 1 5 0

$c
AA BB CC
1 5 1 1
2 4 2 0
3 3 3 0
4 2 4 0
5 1 5 1

我需要使用 For 循环还是有其他方法?

更新:参见 Thell's solution对于 bool 数据和 eddie's solution对于所有数据类型。

提前致谢!

最佳答案

如果 CC 真的是 bool 值...

f <- function(a,b) cbind( a, CC=b$BB[ match( a$AA, b$AA ) ] |
b$BB[ match( a$BB, b$AA ) ] )
mapply( f, firstlist, secondlist, SIMPLIFY=F )

直截了当、快速并保留名称...

示例与 lapply 版本的基准:

Unit: milliseconds
expr min lq median uq max neval
this mapply 1.726471 1.840671 1.870504 1.939473 13.88875 100
Arun's lapply 2.930061 3.048110 3.134402 3.209786 14.61630 100

关于r - 两个列表与多列 data.frames 的条件匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198817/

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