根据 R 中两个数据帧中另一列的相等值,在新列在第一个数据帧中中添加值来自第二个数据帧

问题描述

当来自 df1 和 df2 的同一行列 (NameSize) 的值相等时,我试图将列 ConversionFactor(来自 df2)的每一行的值添加到 df1 的新列($value)。

>

查看代码

df1$value[df2$NameSize == df1$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 列,这样您就不会引入其中的其他内容。

编辑:添加了库调用和更多解释