gpt4 book ai didi

R子集数据框,其中没有观察到某些变量

转载 作者:行者123 更新时间:2023-12-05 09:01:09 24 4
gpt4 key购买 nike

我有一个看起来像的数据框

<表类="s-表"><头>国家扇区data1data2<正文>法国17.法国210.比利时1127比利时2148

我想对某个国家/地区在所有部门中缺失的列进行子集化。在此示例中,我想删除/排除第二列,因为法国的扇区 1 和扇区 2 缺少它。需要明确的是,在此示例中,我还将丢弃比利时的 data2 值。

我的预期输出是这样的

<表类="s-表"><头>国家扇区data1<正文>法国17法国210比利时112比利时214

数据 2 现在被排除在外,因为它具有法国所有部门的完整缺失值集

最佳答案

我们可以按国家/地区分组,创建逻辑列,其中 NA 的计数元素等于分组大小,取消分组,根据逻辑列将对应的列替换为NA,去掉select中的那些列

library(dplyr)
library(stringr)
df1 %>%
group_by(country) %>%
mutate(across(everything(), ~ sum(is.na(.x)) == n(),
.names = "{.col}_lgl")) %>%
ungroup %>%
mutate(across(names(df1)[-1], ~ if(any(get(str_c(cur_column(),
"_lgl")) )) NA else .x)) %>%
select(c(where(~ !is.logical(.x) && any(complete.cases(.x)))))

-输出

# A tibble: 4 × 3
country sector data1
<chr> <int> <int>
1 France 1 7
2 France 2 10
3 belgium 1 12
4 belgium 2 14

如果不使用group_by,步骤可以简化为Maël's post 即在 select 中使用基本 R 函数进行分组即 tapplyave可以工作

df1 %>%
select(where(~ !any(tapply(is.na(.x), df1[["country"]],
FUN = all))))

数据

df1 <- structure(list(country = c("France", "France", "belgium", "belgium"
), sector = c(1L, 2L, 1L, 2L), data1 = c(7L, 10L, NA, 14L), data2 = c(NA,
NA, 7L, 8L)), row.names = c(NA, -4L), class = "data.frame")

关于R子集数据框,其中没有观察到某些变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74099856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com