删除两个特定行之间的行

时间:2019-11-13 07:07:05

标签: r

关于删除特定行,我有一个小问题。 在此示例中,我想删除“电源”列中单词“ 5055”中的行,直到“ fr”列中单词“ Exer”为止。 重要的是,我想在id(此处为LM01-PRD-S1和LB02-PRD-S1)中都应用此函数。

                   time   power        hr     fr          id

 1                  <NA>  5055       Zoti      E LM01-PRD-S1
 2              747 mmHg  <NA>       09/0   2016 LM01-PRD-S1
 3 9.7222222222222224E-3     0         76     20 LM01-PRD-S1
 4  2.013888888888889E-2     0         77     16 LM01-PRD-S1
 5 2.9861111111111113E-2     0         77     17 LM01-PRD-S1
 6                  <NA>  <NA>       <NA>   Exer LM01-PRD-S1
 7 1.0416666666666666E-2    25         90     24 LM01-PRD-S1
 8 1.9444444444444445E-2    25         92     23 LM01-PRD-S1
 9 3.0555555555555555E-2    25         93     22 LM01-PRD-S1
10                  <NA>  5055       Zoti      E LB02-PRD-S1
11              750 mmHg  <NA>       11/0   2016 LB02-PRD-S1
12 8.3333333333333332E-3     0         81     14 LB02-PRD-S1
13 1.6666666666666666E-2     0         96     15 LB02-PRD-S1
14 2.8472222222222222E-2     0         71     14 LB02-PRD-S1
15                  <NA>  <NA>       <NA>   Exer LB02-PRD-S1
16 1.0416666666666666E-2    35        102     16 LB02-PRD-S1
17 1.9444444444444445E-2    35        101     17 LB02-PRD-S1
18 3.0555555555555555E-2    35        105     15 LB02-PRD-S1

我尝试了此功能,但是我删除了1至15行,而我只想删除1至6行和10至15行。

df[-c(min(grep("5055",df[,power])):max(grep("Exer",df[,fr]))),]

这是我想要获得的最终结果。

                   time power    hr    fr          id
1 1.0416666666666666E-2    25    90    24 LM01-PRD-S1
2 1.9444444444444445E-2    25    92    23 LM01-PRD-S1
3 3.0555555555555555E-2    25    93    22 LM01-PRD-S1
4 1.0416666666666666E-2    35   102    16 LB02-PRD-S1
5 1.9444444444444445E-2    35   101    17 LB02-PRD-S1
6 3.0555555555555555E-2    35   105    15 LB02-PRD-S1

我希望我能解释清楚。 谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这里是一个解决方案。绝对不是最优雅的,但它正在完成工作。

1)定义每个目标5055和Exer的位置

vec5055 = grep("5055",df[,"power"])
vecExer = grep("Exer",df[,"fr"])

然后,我们正在创建一个新的向量VEC,它将包含我们要删除的所有行,并将应用于数据帧df

if(length(vec5055) == length(vecExer)){
  VEC = NULL
  for(i in 1:length(vec5055))
  {
    VEC = c(VEC,vec5055[i]:vecExer[i])
  }
  df = df[-VEC,]
}

您应该获得期望的数据集。 我敢肯定,它还有其他更简单的解决方案,但是目前这是我唯一想到的解决方案。

让我知道您是否还可以