仅从数据框

时间:2016-01-28 12:49:33

标签: r select dataframe

如何只选择特定列中相同值的行?

即。 从中(用作参考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

2 个答案:

答案 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,]