gpt4 book ai didi

将 R 中的 NA 值替换为按 ID 子集化的 999

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

我在 R 中创建了以下数据框

    df<-data.frame("ID"=c("A", "A", "A", "B", "B", "B"),"II"=c(NA, NA, 
NA,1,2,3),"JJ"=c(1,2,3, NA, NA, NA), 'KK'=c(1,2,NA, NA, 5,6))

生成的dataframe如下

  ID II JJ KK
A NA 1 1
A NA 2 2
A NA 3 NA
B 1 NA NA
B 2 NA 5
B 3 NA 6

我想按 ID 值对数据帧进行子集化,并将所有仅包含 NA 值的列替换为 999。结果应如下所示

 ID  II  JJ KK
A 999 1 1
A 999 2 2
A 999 3 NA
B 1 999 NA
B 2 999 5
B 3 999 6

我已经尝试过这段代码

   library(dplyr)
df%>%
group_by(ID)%>%
select(II, JJ,KK)%>%
mutate_if(df[, colSums(is.na(df)) == nrow(df)]<999)

我收到以下错误

 Adding missing grouping variables: `ID`
Error in tbl_if_vars(.tbl, .p, .env, ..., .include_group_vars =
.include_group_vars) :
length(.p) == length(tibble_vars) is not TRUE

我请求有人看一下。我无法弄清楚。对于基于 dplyr 的解决方案来说不是必需的

最佳答案

我们可以使用all来捕获具有所有NA的组。由于我们想要替换所有列中的 NA,因此我们可以使用 mutate_all,其中 funs (即要应用于所有列的函数)列)是组的简单 replace(),其中 all() 值为 NA。替换为 999

library(tidyverse)

df %>%
group_by(ID) %>%
mutate_all(funs(replace(., all(is.na(.)), 999)))

这给出了,

# A tibble: 6 x 4
# Groups: ID [2]
ID II JJ KK
<fct> <dbl> <dbl> <dbl>
1 A 999 1 1
2 A 999 2 2
3 A 999 3 NA
4 B 1 999 NA
5 B 2 999 5
6 B 3 999 6

关于将 R 中的 NA 值替换为按 ID 子集化的 999,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54920332/

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