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))