我有一个包含超过200 000个数据的大型数据集。我想消除那些在他们旁边的行中有FALSE语句的患者
这就是它的样子:
patient1 FALSE TRUE FALSE FALSE
patient2 TRUE TRUE TRUE TRUE
Patient3 TRUE NA NA NA
Patient4 FALSE NA NA NA
这就是我希望数据集看起来像
的方式Patient2 TRUE TRUE TRUE TRUE
Patient3 TRUE NA NA NA
是的,有人可以帮帮我吗? :)
答案 0 :(得分:1)
将所有列连接到除Patient列之外的新变量并在整个数据集上使用grepl函数,检查下面的代码是否相同
def <- data.frame(patient=c("patient1","patient2","patient3"),one=c(T,F,T),two=c(T,T,T),three=c(T,NA,NA),
stringsAsFactors = F)
def <- within(def,new<-paste(one,two,three))
def <- subset(def, !grepl(F,def$new))
def$new <- NULL
print(def)
patient one two three
1 patient1 TRUE TRUE TRUE
3 patient3 TRUE TRUE NA
答案 1 :(得分:1)
您可以使用rowSums
执行此操作,如下所示:
df[rowSums(!df[, -1], na.rm = TRUE) == 0, ]
输出是:
2 patient2 TRUE TRUE TRUE TRUE
3 Patient3 TRUE NA NA NA
编辑:根据以下关于row.names
的评论,添加不同的选项:
如果读取数据框使得患者编号是行的名称而不是它自己的列,则可以得到如下结果:
df
V2 V3 V4 V5
patient1 FALSE TRUE FALSE FALSE
patient2 TRUE TRUE TRUE TRUE
Patient3 TRUE NA NA NA
Patient4 FALSE NA NA NA
df[rowSums(!df, na.rm = TRUE) == 0, ]
V2 V3 V4 V5
patient2 TRUE TRUE TRUE TRUE
Patient3 TRUE NA NA NA