压缩代码:检查多个列是否遵循 R 中数据框中的布尔值
Condensing code: Check that multiple columns follow a boolean in data frame in R
我有一个具有一些 NA 值的数据框 (df)。我想提取跨多个列的 NA 值的行(在下面的示例中,我对第 12-20 列这样做):
NArows = which(is.na(df[,20])&is.na(df[,19]&is.na(df[,18])&is.na(df[,17])&is.na(df[,16])&is.na(df[,15])&is.na(df[,14])&is.na(df[,13])&is.na(df[,12])))
是否有更易读(和简洁)的方法来完成此操作,而无需将每列条件都用 & 符号包围?
感谢您的帮助...
试试这个:
cols <- 12:20
NArows <- which(apply(df[cols],1,function(y)sum(!is.na(y))==0))
它将你的 df 切片到你关心的 'cols',然后将测试 is.na() 应用于每一行,如果它发现这些列中的所有值都是 NA,它会添加该行数字到 NArows。
或者根据 david arenburg 的回答,这会标记具有 2 个或更多 NA 的任何行:
NArows <- which(rowSums(is.na(df[12:20])) > 1L)
调整它以更符合您的要求,这只会标记全部为 NA 的行:
cols <- 12:20
NArows <- which(rowSums(is.na(df[cols])) == ncol(df[cols]))
我有一个具有一些 NA 值的数据框 (df)。我想提取跨多个列的 NA 值的行(在下面的示例中,我对第 12-20 列这样做):
NArows = which(is.na(df[,20])&is.na(df[,19]&is.na(df[,18])&is.na(df[,17])&is.na(df[,16])&is.na(df[,15])&is.na(df[,14])&is.na(df[,13])&is.na(df[,12])))
是否有更易读(和简洁)的方法来完成此操作,而无需将每列条件都用 & 符号包围?
感谢您的帮助...
试试这个:
cols <- 12:20
NArows <- which(apply(df[cols],1,function(y)sum(!is.na(y))==0))
它将你的 df 切片到你关心的 'cols',然后将测试 is.na() 应用于每一行,如果它发现这些列中的所有值都是 NA,它会添加该行数字到 NArows。
或者根据 david arenburg 的回答,这会标记具有 2 个或更多 NA 的任何行:
NArows <- which(rowSums(is.na(df[12:20])) > 1L)
调整它以更符合您的要求,这只会标记全部为 NA 的行:
cols <- 12:20
NArows <- which(rowSums(is.na(df[cols])) == ncol(df[cols]))