【发布时间】:2020-12-20 14:01:01
【问题描述】:
我有来自两个数据框的信息:df1 包含个人信息,df2 包含这些个人父母的信息。
> df1
ID Obs sire dam
1 313425 Obs1 241600 238895
2 313425 Obs2 241600 238895
3 313425 Obs3 241600 238895
4 313531 Obs2 239742 241447
5 315760 Obs2 238355 236642
6 315760 Obs1 238355 236642
和
> df2
Animal Obs Obs_value
1 241600 Obs1 19.9
2 239742 Obs1 19.6
3 238355 Obs1 18.5
4 238895 Obs1 20.1
5 241447 Obs1 22.0
6 236642 Obs1 19.8
7 241600 Obs2 1.9
8 239742 Obs2 1.6
9 238355 Obs2 1.5
10 238895 Obs2 2.1
11 241447 Obs2 2.0
12 236642 Obs2 1.8
13 241600 Obs3 1
14 239742 Obs3 1
15 238355 Obs3 1
16 238895 Obs3 1
17 241447 Obs3 0
18 236642 Obs3 1
我想将来自 df2 的信息添加到 df1,我想将列 df1$Obs、df1$sire(或 df1$dam)与 df2$Animal、df2$Obs 匹配并将 df2$Obs_value 返回到 df1。 所需输出示例:
> df1
ID Obs sire dam sire_value dam_value
1 313425 Obs1 241600 238895 19.9 20.1
2 313425 Obs2 241600 238895 1.9 1.5
3 313425 Obs3 241600 238895 1 1
4 313531 Obs2 239742 241447 1.6 2.0
5 315760 Obs2 238355 236642 1.5 1.8
6 315760 Obs1 238355 236642 1 19.8
我尝试了以下代码,但没有给出正确的结果(或根本没有)。
> df1 <- df1 %>% mutate(sire_value = left_join(df1, df2, by.x = c("ID", "Obs"), by.y = c("Animal", "Obs")))
Joining, by = "Obs"
Error: Problem with `mutate()` input `sire_value`.
x Input `sire_value` can't be recycled to size 6.
i Input `sire_value` is `left_join(...)`.
i Input `sire_value` must be size 6 or 1, not 36.
Run `rlang::last_error()` to see where the error occurred.
谁能帮我解决这个问题?非常感谢!
【问题讨论】:
标签: r merge match left-join dplyr