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

如何对两个含共同单词的DataFrame计数列执行条件相减?

解决两个DataFrame交集单词的n列差值计算问题

嘿,这个需求其实挺常见的,我给你两种实用的实现方式,你可以根据自己的习惯来选:

方法1:使用tidyverse(dplyr)(推荐,代码更直观易读)

如果你还没装dplyr包,先安装并加载:

install.packages("dplyr")
library(dplyr)

接下来用inner_join筛选出两个DataFrame共有的单词,再用mutate计算n列的差值(你可以根据需求调换相减的顺序):

# 你的示例数据
df1 <- data.frame(word=c("beautiful","nice","like","good"),n=c(400,378,29,10))
df2 <- data.frame(word=c("beautiful","nice","like","good","wonderful","awesome","sad","happy"),n=c(6000,20,5,150,300,26,17,195))

# 执行内连接并计算差值
result_df <- df1 %>%
  inner_join(df2, by = "word", suffix = c("_df1", "_df2")) %>%
  mutate(n_diff = n_df2 - n_df1)

# 查看结果
print(result_df)
  • inner_join:只保留两个DataFrame中word列完全匹配的行,也就是你要的交集单词
  • suffix:用来区分来自两个DataFrame的n列,避免重名冲突
  • mutate:新增一列n_diff存储计算后的差值,如果你需要df1减df2,改成n_df1 - n_df2即可

方法2:使用基础R的merge函数(无需额外安装包)

如果你不想依赖第三方包,用基础R自带的merge函数也能实现:

# 你的示例数据
df1 <- data.frame(word=c("beautiful","nice","like","good"),n=c(400,378,29,10))
df2 <- data.frame(word=c("beautiful","nice","like","good","wonderful","awesome","sad","happy"),n=c(6000,20,5,150,300,26,17,195))

# 合并两个DataFrame,默认只保留交集
merged_df <- merge(df1, df2, by = "word")

# 计算n列的差值
merged_df$n_diff <- merged_df$n.y - merged_df$n.x

# 查看结果
print(merged_df)
  • merge默认参数all=FALSE,只会保留两个DataFrame共有的word行
  • 合并后,来自df1的n列会命名为n.x,来自df2的会命名为n.y,直接计算两者差值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:07:24