如何将索引应用于配对行

时间:2014-11-27 08:42:16

标签: r

我有一个以下数据框,表示为每个ID进行的配对观察:

      structure(list(ID = c(9000099, 9000099, 9000296, 9000296, 9000622, 
      9000622), variable = c(2, 0, 0, 4, 0, 1), SIDE = c(1, 2, 1, 2, 
      1, 2)), .Names = c("ID", "variable", "SIDE"), row.names = c(NA, 
      6L), class = "data.frame")

          ID variable SIDE
    1 9000099        2    1
    2 9000099        0    2
    3 9000296        0    1
    4 9000296        4    2
    5 9000622        0    1
    6 9000622        1    2

我想索引我的数据帧,因此如果变量满足我的索引条件,则会删除与此ID对应的两行。 例如,如果我按变量= 4索引数据框,我的df将如下所示:

            ID variable SIDE
    1 9000099        2    1
    2 9000099        0    2
    5 9000622        0    1
    6 9000622        1    2

如果我按变量= 1进行索引,则数据框如下:

          ID variable SIDE
    1 9000099        2    1
    2 9000099        0    2
    3 9000296        0    1
    4 9000296        4    2

有没有办法在不改变我的数据框的情况下做到这一点?

2 个答案:

答案 0 :(得分:4)

你可以编写一个这样的小函数:

Indexer <- function(value) {
  dropme <- unique(df[df$variable %in% value, "ID"])
  df[!df$ID %in% dropme, ]
}

要应用它,只需执行:

Indexer(4)
#        ID variable SIDE
# 1 9000099        2    1
# 2 9000099        0    2
# 5 9000622        0    1
# 6 9000622        1    2
Indexer(1)
#        ID variable SIDE
# 1 9000099        2    1
# 2 9000099        0    2
# 3 9000296        0    1
# 4 9000296        4    2
Indexer(c(2, 4))
#        ID variable SIDE
# 5 9000622        0    1
# 6 9000622        1    2

当然,此功能对于您共享的data.frame是唯一的。您应该对其进行修改,以便指定数据集名称,“变量”列和ID列。例如:

Subsetter <- function(indf, value, look.in, group) {
  dropme <- unique(indf[df[[look.in]] %in% value, group])
  indf[!indf[[group]] %in% dropme, ]
}

尝试一下:

Subsetter(df, 1, look.in = "variable", group = "ID")

答案 1 :(得分:1)

如果您的data.frame名为df,则可以执行以下操作:

df[df$ID!=(df[df$variable==index,"ID"]),]

其中index是您要排除的变量的值。

例如:

index<-4
>df[df$ID!=(df[df$variable==index,"ID"]),]
       ID variable SIDE
1 9000099        2    1
2 9000099        0    2
5 9000622        0    1
6 9000622        1    2