如何对两个含共同单词的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
相关产品推荐
相关产品推荐

