r - 根据 R 中两个数据帧中另一列的相等值,在新列(第一个数据帧中)中添加值(来自第二个数据帧)
问题描述
当来自 df1 和 df2 的同一行的列 (NameSize) 的值相等时,我试图将列 ConversionFactor (来自 df2) 的每一行的值添加到 df1 的新列 ($value)。
见代码:
df1$value[df2$NameSize == df1$NameSize] <- df2$ConversionFactor[df1$NameSize == df2$NameSize]
这两个数据框没有相同的长度,我有这个警告信息:
警告消息: 1:在 data_merged_2018_2019_1$NameSize == final_carbonfactor$NameSize :较长的对象长度不是较短对象长度的倍数 2:在 if (data_merged_2018_2019_1$NameSize == final_carbonfactor$NameSize) { :条件的长度 > 1 并且仅将使用第一个元素
解决方案
如果你熟悉tidyverse
做事的方式,他们有可用的 sqlite join 方法。您的解决方案最终会是这样的:
library(dplyr)
d1.fixed <- d1 %>% left_join(
select( d2, NameSize, ConversionFactor )
) %>% rename( Value = ConversionFactor ) %>%
distinct( NameSize, Value, .keep_all=TRUE )
left_join 通过您指定的列“加入”数据,或自动检测并通知您。我还确保确保 d2 仅包含 NameSize 和 ConversionFactor 列,因此您不会引入其中的其他内容。
编辑:添加库调用和更多解释
推荐阅读
- python - 在 Python 中的其他方法中调用方法
- javascript - Webpack 配置 vs 多个包和排序
- javascript - Javascript 验证 - 检查字符串是否是正确的对象
- python-3.x - 如何在 Python 3 上实现元路径导入器
- php - 使用 Encore、Slim 和 Twig 进行资产版本控制/浏览器缓存破坏
- macos - IntelliJ IDEA 无法在 macOS Catalina 上打开项目或添加 SDK
- scala - 将 Scala Future[Seq[X]] 与 Seq[Future[Y]] 组合生成 Future[(X,Seq[Y])]
- javascript - 从 iPad 创建画布图像
- mysql - 我可以只存储主键吗?
- python - 如何使用 for 循环为具有数字列的数据框打印条件唯一值