如何从R中的数据框中提取成对的行

时间:2014-02-04 16:20:09

标签: r dataframe

我有一个大型数据框,其中大多数科目都有一对观察结果,如:

set.seed(123)
df<-data.frame(ID=c(letters[1:4],letters[1:6]),x=sample(1:5,10,T))
    ID x
1   a 2
2   b 4
3   c 3
4   d 5
5   a 5
6   b 1
7   c 3
8   d 5
9   e 3
10  f 3

我将提取所有ID配对的行,例如:

  ID x
1  a 2
5  a 5
2  b 4
6  b 1
3  c 3
7  c 3
4  d 5
8  d 5

R中最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用ave获取length中每个值的df$ID,然后将其用于data.frame

的子集
out <- df[as.numeric(ave(as.character(df$ID), df$ID, FUN = length)) == 2, ]
out
#   ID x
# 1  a 2
# 2  b 4
# 3  c 3
# 4  d 5
# 5  a 5
# 6  b 1
# 7  c 3
# 8  d 5

如果需要,使用order对输出进行排序。

out[order(out$ID), ]

您还可以查看使用data.table

dt <- data.table(df, key = "ID") # Also sorts the output
dt[, n := .N, by = "ID"][n == 2]

答案 1 :(得分:2)

或者,我倾向于使用duplicated

> df[df$ID %in% df$ID[duplicated(df$ID)],]
  ID x
1  a 2
2  b 1
3  c 5
4  d 5
5  a 4
6  b 2
7  c 3
8  d 4