我有以下数据框架,表示对每个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如果i按变量= 1索引,数据框架如下:
ID variable SIDE
1 9000099 2 1
2 9000099 0 2
3 9000296 0 1
4 9000296 4 2有没有办法在不转换数据帧的情况下做到这一点?
发布于 2014-11-27 08:47:03
您可以编写这样一个小函数:
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是唯一的。您应该修改它,以便可以指定dataset名称、"variable“列和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")发布于 2014-11-27 08:48:45
如果您的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 2https://stackoverflow.com/questions/27166334
复制相似问题