根据逻辑参数

时间:2016-05-25 12:45:50

标签: r

我有一个包含超过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
是的,有人可以帮帮我吗? :)

2 个答案:

答案 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