首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将索引应用于成对行

如何将索引应用于成对行
EN

Stack Overflow用户
提问于 2014-11-27 08:42:16
回答 2查看 62关注 0票数 0

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

代码语言:javascript
运行
复制
      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如下所示:

代码语言:javascript
运行
复制
            ID variable SIDE
    1 9000099        2    1
    2 9000099        0    2
    5 9000622        0    1
    6 9000622        1    2

如果i按变量= 1索引,数据框架如下:

代码语言:javascript
运行
复制
          ID variable SIDE
    1 9000099        2    1
    2 9000099        0    2
    3 9000296        0    1
    4 9000296        4    2

有没有办法在不转换数据帧的情况下做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-27 08:47:03

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

代码语言:javascript
运行
复制
Indexer <- function(value) {
  dropme <- unique(df[df$variable %in% value, "ID"])
  df[!df$ID %in% dropme, ]
}

要应用它,只需:

代码语言:javascript
运行
复制
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列。例如:

代码语言:javascript
运行
复制
Subsetter <- function(indf, value, look.in, group) {
  dropme <- unique(indf[df[[look.in]] %in% value, group])
  indf[!indf[[group]] %in% dropme, ]
}

试试看:

代码语言:javascript
运行
复制
Subsetter(df, 1, look.in = "variable", group = "ID")
票数 4
EN

Stack Overflow用户

发布于 2014-11-27 08:48:45

如果您的data.frame被称为df,您可以这样做:

代码语言:javascript
运行
复制
df[df$ID!=(df[df$variable==index,"ID"]),]

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

例如:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27166334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档