首页 > 解决方案 > 根据 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 并且仅将使用第一个元素

标签: rdataframerowaddequality

解决方案


如果你熟悉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 列,因此您不会引入其中的其他内容。

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


推荐阅读