我有 Natura 2000 网络内外不同站点的大型数据集。
一个例子:
df
姓名 | 总表面 | N2000 | SurfaceN2000 |
---|---|---|---|
A | 1 | 是的 | 0.5 |
B | 5 | 没有 | 不适用 |
C | 11 | 没有 | 不适用 |
D | 10 | 是的 | 5 |
我想要获得 Natura 2000 场地内外表面的摘要。如果我的场地一半在 N2000 场地内,我不关心剩余的表面。
如何根据条件从一列或另一列中获取值来求和?
我知道我可以用 Total_Surface 制作一列,用 SurfaceN2000 制作另一列,但我想知道是否有更自动的解决方案。
我尝试了很多方法,但没有成功。我最后尝试的是
df %>%
group_by(N2000) %>%
summarise(surface=
case_when(N2000== "No" ~ sum(Total_Surface,na.rm = TRUE),
N2000== "Yes" ~ sum(SurfaceN2000,na.rm = TRUE)))
我也尝试过使用filter()或rbind(),但它也不起作用。
我期待一个像这样的输出表:
N2000 | 表面 |
---|---|
是的 | 5.5 |
没有 | 16 |
提前非常感谢您! :)
有这样的事吗?
df %>%
group_by(N2000) %>%
mutate(area = ifelse(N2000== "Yes",SurfaceN2000, Total_Surface )) %>%
summarise(surface= sum(area, na.rm = T))
# A tibble: 2 × 2
N2000 surface
<chr> <dbl>
1 No 16
2 Yes 5.5