R根据各种标准删除行

时间:2017-06-13 09:40:28

标签: r

我需要一些关于如何在R中开始实现问题的帮助。我有一个数据框,其中的行按变量' id'进行分组。对于每个人的身份#39;我想只保留一排。但是,我有许多标准可以指定要删除的行。

这些是我的一些标准:

  1. 我想在每个组中保留一个随机行' id'哪个有'文字' != NA(可能有几个这样的行);我还希望保留此行的所有列,以下所有条件也是如此。
  2. 如果组中的所有行都有' text' == NA,然后我想保留一个随机行,其中包含变量' check' == T(可能有几个这样的行)
  3. 如果组中的所有行都有' text' == NA和'检查' == F,然后我想保留包含变量' newtext'的行。满足条件!(grepl("无",df $ newtext))
  4. 如果这样可以更清楚,我还可以提供数据集。但是,我最重要的问题是我不知道如何根据有序数量的条件实现删除行的逻辑。 如果有人能告诉我如何实现这样的代码,那就太好了。

    谢谢!

    这将是一个示例数据集:

    df <- data.frame(id = c(1,1,1,2,2,2,3,3,3),
                 text=c("asd",NA,"asd",NA,NA,NA,NA,NA,NA),
                 check = c(T,F,T,T,T,F,F,F,F),
                 newtext = 
    c("as","as","as","das","das","None","qwe","qwe2","None"),
                 othervars = c(1,2,3,45,5,6,6,7,1))
    

    作为输出,我想保留以下行: 第1行或第3行 第4行或第5行 第7行或第8行 应该保留其他列的列,以及稍后我需要这些信息。

    希望这会让它更清晰。

1 个答案:

答案 0 :(得分:0)

好吧,我有东西。我正在使用filter()中的dplyr到未知NA的子集,因为我使用subset()或基本df[,]子集来遇到问题{{1 }}

数据:

R

启动新的空数据框:

df <- data.frame(id = c(1,1,1,2,2,2,3,3,3),
             text=c("asd",NA,"asd",NA,NA,NA,NA,NA,NA),
             check = c(T,F,T,T,T,F,F,F,F),
             newtext = 
c("as","as","as","das","das","None","qwe","qwe2","None"),
             othervars = c(1,2,3,45,5,6,6,7,1))

循环到每df2 <- df[0,] 个样本行:

id

输出示例:

library(dplyr)

for(i in unique(df$id)){
  temp <- filter(df, id == i)
  if(nrow(filter(temp, !is.na(text))) > 0){
    temp <- filter(temp, !is.na(text))
    df2[i, ] <- temp[sample(nrow(temp), size = 1), ]
  }else if(nrow(filter(temp, check)) > 0){
    temp <- filter(temp, check)
    df2[i, ] <- temp[sample(nrow(temp), size = 1), ]
  }else{
    temp <- filter(temp, !(grepl("None",temp$newtext)))
    df2[i, ] <- temp[sample(nrow(temp), size = 1), ]
  }
}

问候。

编辑:忽略左侧的行号,它们是循环中不同子集的残差。