关于删除特定行,我有一个小问题。 在此示例中,我想删除“电源”列中单词“ 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
我希望我能解释清楚。 谢谢您的帮助!
答案 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,]
}
您应该获得期望的数据集。 我敢肯定,它还有其他更简单的解决方案,但是目前这是我唯一想到的解决方案。
让我知道您是否还可以