首页 > 解决方案 > 删除两个特定行之间的行

问题描述

我有一个关于删除特定行的小问题。在此示例中,我想从“power”列中的单词“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

我希望我解释得很好。谢谢您的帮助!

标签: r

解决方案


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

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,]
}

你应该得到你期望的数据集。我确信它存在其他更简单的解决方案,但现在它是我唯一想到的。

让我知道你是否可以


推荐阅读