提问人:Grg Lulu 提问时间:3/9/2021 最后编辑:Grg Lulu 更新时间:3/9/2021 访问量:31
根据 R 中两个数据帧中另一列的相等值,在新列(第 1 个数据帧中)中添加值(来自第 1 个数据帧)
Add value (from 2nd dataframe) in new column (in 1st dataframe) based on equality value of another column from both dataframe in R
问:
当 df1 和 df2 的同一行列 (NameSize) 的值相等时,我正在尝试将 ConversionFactor 列(来自 df2)的每一行的值添加到 df1 的新列 ($value) 中。
查看代码:
df1$值[df2$NameSize == df1$NameSize] <- df2$ConversionFactor[df1$NameSize == df2$NameSize]
两个 DataFrame 的长度不同,我有此警告消息:
警告消息: 1:在 data_merged_2018_2019_1$NameSize == final_carbonfactor$NameSize 中: 较长的对象长度不是较短对象长度的倍数 2: 在 if (data_merged_2018_2019_1$NameSize == final_carbonfactor$NameSize) { : 条件的长度为 1 >,并且仅使用第一个元素
答:
0赞
Sirius
3/9/2021
#1
如果您熟悉做事方式,他们有可用的 sqlite 连接方法。您的解决方案将如下所示:tidyverse
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 列,这样您就不会引入其中的其他内容。
编辑:添加了库调用和更多解释
评论
0赞
Grg Lulu
3/9/2021
嘿,我确实使用了 left_join 函数,但我最终在新数据框上的行数(例如,2015 年)比开始时(例如,1934 年)多,因为有些行是重复的,我不明白为什么。这就是为什么我想知道以不同的方式做它并且不使用 dplyr 的 left_ join 函数:/
0赞
Sirius
3/9/2021
您应该能够使用 (dplyr.tidyverse.org/reference/distinct.html),如现在编辑的代码中所示。只需给它您打算定义唯一性的列即可。但是,如果您一开始就不明白为什么会有重复项,我建议您先尝试弄清楚原因。distinct
0赞
Grg Lulu
3/9/2021
我想,我在 df2 的值是它复制它的两倍......非常感谢:)
评论