gpt4 book ai didi

r - 根据多个条件计算行数

转载 作者:行者123 更新时间:2023-12-02 01:54:42 26 4
gpt4 key购买 nike

我有一个简单的问题,但我不知道如何解决...我有两个矩阵,我试图在第一个矩阵中创建一个列,表示第二个矩阵中的一行匹配一组条件的次数。例如,假设我有矩阵 A

    Ad1    Ad2    Ad3    Ad4
AA 101 0 10
AA 101 10 12
AA 101 12 15
AA 101 15 20
AA 300 0 100
AA 300 100 230
AA 300 230 300
...

矩阵B是

    Bd1    Bd2    Bd3
AA 101 0
AA 101 1
AA 101 2
AA 101 4
AA 101 5
...
AB 102 1
AB 102 10
...

我想在 A 中创建第五列,其中包含 B 中符合以下条件(对于 A 的每一行)的行数计数:

(A$Ad1==B$Bd1) & (A$Ad2==B$Bd2) & (A$Ad3<=B$Bd3) & (A$Ad4>B$Bd3)

有没有一种方法可以在不为 A 的每一行创建循环的情况下执行此操作?

最佳答案

第一列的因素性质可能会妨碍,因此第一次比较需要使用 as.character 或 %in%:

A = read.table(text="Ad1    Ad2    Ad3    Ad4
AA 101 0 10
AA 101 10 12
AA 101 12 15
AA 101 15 20
AA 300 0 100
AA 300 100 230
AA 300 230 300", header=TRUE)

B = read.table(text=" Bd1 Bd2 Bd3
AA 101 0
AA 101 1
AA 101 2
AA 101 4
AA 101 5
AB 102 1
AB 102 10", header=TRUE)
> with( A, mapply(function(x,y,z,z2){sum((x %in% B$Bd1) & (y == B$Bd2) &
(z <= B$Bd3) & (z2 > B$Bd3) )},
Ad1, Ad2, Ad3, Ad4) )
[1] 5 0 0 0 0 0 0

> with( A, mapply(function(x,y,z,z2){sum((as.character(x) == B$Bd1) & (y == B$Bd2) &
(z <= B$Bd3) & (z2 > B$Bd3) )},
Ad1, Ad2, Ad3, Ad4) )
[1] 5 0 0 0 0 0 0

这是使用 ==

时抛出的错误
> factor("a", levels=c("a","b")) == factor("a")
Error in Ops.factor(factor("a", levels = c("a", "b")), factor("a")) :
level sets of factors are different

关于r - 根据多个条件计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914425/

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