将一个 DataFrame 中的每个单元格与第二个 Data Frame 中一列中的所有值进行比较,并计算第一个 DF 单元格在 R 中后退的次数

compare each cell in one dataframe to all values within a column in a second data frame and count the number of times the first df cell recedes in r

提问人:user11057680 提问时间:11/1/2023 最后编辑:user11057680 更新时间:11/2/2023 访问量:40

问:

想要计算 DF2(DF2$B) 整列中的值在 DF1$A 中每个单元格下方的次数。

例:

DF1 <- data.frame(Q=c("fun","fun"),
                  A=c(200,700))
DF2 <- data.frame(Z=as.Date(c("2023-10-01","2023-10-02","2023-10-03","2023-10-04")),
                  B=c(600,500,100,800))

期望输出:

DF1$Counter <- c(1,3)
R 数据帧 if 语句 联接 行和

评论


答:

1赞 Onyambu 11/1/2023 #1

利用 findInterval。请注意,您必须先进入该列sortDF2$B

DF1$Counter <- findInterval(DF1$A, sort(DF2$B))
DF1
    Q   A Counter
1 fun 200       1
2 fun 700       3
0赞 user11057680 11/2/2023 #2

Sapply 的替代方案是......

DF1$Counter <- sapply(DF1$A, function(x, y) {sum(y < x)}, y = DF2$B)