R数据帧:通过处理组合条件

R数据帧:通过处理组合条件,r,dataframe,R,Dataframe,我必须找到包含所有NA-值的所有列。如果列中没有所有的NA-值,我必须将NAs替换为0。 我的解决办法是: NA_check <- colSums(is.na(frame)) == nrow(frame) #True or False - all NA or not frame[is.na(frame) & which(names(frame) %in% names(NA_check)[which(NA_check == FALSE, arr.ind=T)])] <- 0

我必须找到包含所有
NA
-值的所有列。如果列中没有所有的
NA
-值,我必须将
NA
s替换为
0
。 我的解决办法是:

NA_check <- colSums(is.na(frame)) == nrow(frame) #True or False - all NA or not

frame[is.na(frame) & which(names(frame) %in% names(NA_check)[which(NA_check == FALSE, arr.ind=T)])] <- 0

您可以找到至少有一个非
NA
值的列(并非所有值都是
NA
),并将该子集中的
NA
替换为0

not_all_NA <- colSums(!is.na(frame)) > 0
frame[not_all_NA][is.na(frame[not_all_NA])] <- 0

谢谢您的回答,但任务是替换
NA
,因此该列并非完全由
NA
组成。我检查了您的解决方案,并选择了
未定义列
错误:(好的…因此需要反转条件。我已更新了答案,并提供了一个示例来说明其工作原理。您能否确认这是否是您想要的?不幸的是,我在
框架中使用您的解决方案
未定义列选择了
,出现了相同的错误[not_all_NA][is.NA(frame[not_all_NA])]@Angelika请提供一个类似于我所展示的示例,我们可以使用该示例重现您面临的错误。
not_all_NA <- colSums(!is.na(frame)) > 0
frame[not_all_NA][is.na(frame[not_all_NA])] <- 0
frame <- data.frame(a = c(NA, NA, 3, 4), b = NA, c = c(NA, 1:3), d = NA)
frame
#   a  b  c  d
#1 NA NA NA NA
#2 NA NA  1 NA
#3  3 NA  2 NA
#4  4 NA  3 NA
not_all_NA <- colSums(!is.na(frame)) > 0
frame[not_all_NA][is.na(frame[not_all_NA])] <- 0
frame

#  a  b c  d
#1 0 NA 0 NA
#2 0 NA 1 NA
#3 3 NA 2 NA
#4 4 NA 3 NA
library(dplyr)
frame %>% mutate(across(where(~any(!is.na(.))), tidyr::replace_na, 0))