如何只选择特定列中相同值的行?
即。 从中(用作参考v1的值)
`v1 = c(1,1,2,3,1,2,4,1,1,2,3,4)
v2 = seq(1:12)
v3 = c(rep("blue", 4), rep("red", 4), rep("green", 4))
df<- data.frame(v1, v2, v3)
df`
> df
v1 v2 v3
1 1 1 blue
2 1 2 blue
3 2 3 blue
4 3 4 blue
5 1 5 red
6 2 6 red
7 4 7 red
8 1 8 red
9 1 9 green
10 2 10 green
11 3 11 green
12 4 12 green
对此;其中只有案例1和8,后面跟着v1的值也是1的情况被保存
v1 v2 v3
1 1 1 blue
8 1 8 red
答案 0 :(得分:2)
我们可以使用rleid
中的data.table
来获取游程长度类型ID,将其用作分组变量,并且if
nrow大于1(.N >1
),选择第一个观察(head(.SD, 1L)
)。
library(data.table)
setDT(df)[, if(.N>1) head(.SD, 1L) ,.(v1,rleid(v1))][,rleid:= NULL][]
# v1 v2 v3
# 1: 1 1 blue
# 2: 1 8 red
注意:我们使用setDT(df)
将'data.frame'转换为'data.table'。
答案 1 :(得分:0)
您可以提取感兴趣的索引,然后从数据框中提取感兴趣的行。
indices <- which(df$v1[1:(nrow(df)-1)]==df$v1[2:nrow(df)])
df.new <- df[indices,]