我有一个以下数据框,表示为每个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
有没有办法在不改变我的数据框的情况下做到这一点?
答案 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