R - 根据分组值中的条件对不同列中的行求和

问题描述 投票:0回答:1

我有 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

提前非常感谢您! :)

r dplyr tidyr conditional-operator
1个回答
0
投票

有这样的事吗?

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
© www.soinside.com 2019 - 2024. All rights reserved.