在R中统计DF2列值低于DF1每个单元格值的次数
统计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))
实现方法
基础R方法(最简洁)
用sapply遍历DF1$A的每个值,统计DF2$B中小于该值的元素个数:
DF1$Counter <- sapply(DF1$A, function(x) sum(DF2$B < x))
执行后DF1$Counter结果为c(1,3),符合预期。
向量化函数写法
如果需要重复使用统计逻辑,可以封装成向量化函数:
count_less <- Vectorize(function(x) sum(DF2$B < x)) DF1$Counter <- count_less(DF1$A)
dplyr方法(适合数据框操作场景)
如果习惯用tidyverse工具链,可通过交叉连接+分组统计实现:
library(dplyr) DF1 <- DF1 %>% mutate(row_id = row_number()) %>% # 标记行号用于后续匹配 cross_join(DF2) %>% # 生成DF1与DF2的所有组合 group_by(row_id) %>% summarise(Counter = sum(B < A)) %>% # 按行统计符合条件的次数 right_join(DF1, by = "row_id") %>% # 合并回原DF1 select(-row_id) # 移除临时行号列
内容的提问来源于stack exchange,提问作者user11057680
相关产品推荐
相关产品推荐

