You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何基于另一个dataframe的数值过滤并计算新列取值

错误原因

你原代码报错的核心是filter(A == df1$A)的逻辑错误:df1$A是长度等于df1行数的完整向量,和df2的A列长度不匹配,无法实现逐行对应df1的A值筛选df2的需求。

最优解决方案(推荐)

先对df2按A分组预计算比率,再通过关联匹配给df1加新列,该方法避免逐行遍历,大样本下效率更高:

library(dplyr)

# 预计算每个A值对应的C值
df2_ratio <- df2 %>%
  group_by(A) %>%
  # sum(B>0.5)直接统计符合条件的行数,n()是当前分组总条数,round保留2位小数匹配示例
  summarise(C = round(sum(B > 0.5)/n(), 2))

# 关联到df1
df1 <- left_join(df1, df2_ratio, by = "A")

逐行计算方案(仅适合小数据集)

如果确实需要逐行匹配计算,可以用rowwise()实现逐行取值:

library(dplyr)

df1 <- df1 %>%
  rowwise() %>%
  mutate(C = round(sum(df2$A == A & df2$B > 0.5) / sum(df2$A == A), 2)) %>%
  ungroup() # 取消行分组避免后续操作异常

两种方案输出的df1的C列都完全匹配你给出的预期结果。

内容的提问来源于stack exchange,提问作者fdafda12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:36:01