【发布时间】:2020-12-02 04:00:02
【问题描述】:
我有两个数据框。第一个数据框包括:四列 1) ID、2) 站点、3) 深度和 3) 密度。第二个数据框由 3 列组成:1) ID、2) 站点和 3) 选择(即最喜欢的站点)。
df1
ID Site Depth Density
1 B 0.1 0
2 C 0.2 0
3 C 0.2 1
4 A 0.05 0
5 A 0.05 1
6 B 0.1 1
7 B 0.1 2
8 B 0.1 3
9 D 0.3 0
10 C 0.2 2
11 D 0.3 1
12 D 0.3 2
13 D 0.3 3
14 D 0.3 4
15 D 0.3 5
df 2
ID Site Choices
1 A No
1 B Yes
1 C No
1 D No
2 A No
2 B No
2 C Yes
2 D No
3 A No
3 B No
3 C Yes
3 D No
4 A Yes
4 B No
4 C No
4 D No
我正在尝试向 df2 添加一列,当 ID 选择其最喜欢的站点时,该列具有每个站点的每个 ID 的密度。
期望的输出:
ID Site Depth Density Choice
1 A 0.05 0 No
1 B 0.1 0 Yes
1 C 0.2 0 No
1 D 0.3 0 No
2 A 0.05 0 No
2 B 0.1 1 No
2 C 0.2 0 Yes
2 D 0.3 0 No
3 A 0.05 0 No
3 B 0.1 0 No
3 C 0.2 1 Yes
3 D 0.3 0 No
4 A 0.05 0 Yes
4 B 0.1 1 No
4 C 0.2 2 No
4 D 0.3 0 No
df2说明:ID 1选择站点B时,站点A、B、C、D的密度为0。ID 2选择C时,站点A的密度为0,站点B 1,站点C 0,站点 D 0。当 ID 3 选择站点 C 时,A 中的密度仍然为 0(还没有 ID 选择站点 A),B 为 1,C 为 1,站点 D 为 0,依此类推。
我尝试过使用完整的连接函数和变异函数,但没有得到我想要的输出:
df3<-df2 %>%
full_join(df1, by = c("ID", "Site")) %>%
group_by(ID) %>%
mutate(Density= Density[Choice == "Yes"] ) %>%
distinct(ID, Site, .keep_all = TRUE)
【问题讨论】:
-
我认为您打错字了 - 您想要的输出 ID 3 站点 B 显示的密度为
0,但您的文字显示 “当 ID 3 选择站点 C 时,... B 有 1"。我认为你的文字是正确的,你想要的输出是错误的,但我想检查以确保我理解。