【问题标题】:Does dplyr or plyr have a remainder function?dplyr 或 plyr 是否具有余数功能?
【发布时间】:2016-01-27 20:00:04
【问题描述】:

dplyr 或 plyr 有余数功能吗?

假设我有一系列模式(1-25)要研究

例如数据集 Main

idc3 = c("23|24")

column0|column1|column2|column3|MODE1|MODE2|MODE3
     4 |  83   |   23  |   863 | 85  | 86  |  45
    53 |  26   |   9   |   153 | 23  | 34  |  85
    33 |  66   |   91  |   693 | 95  | 23  |  74
     6 |  87   |   27  |   863 | 47  | 56  |  52
    57 |  27   |   9   |   153 | 78  | 38  |  64
    37 |  67   |   97  |   693 | 34  | 86  |  24

cut  <- Main[unique(grep(paste(idc3), Main$MODE1)), ]
cut2 <- Main[unique(grep(paste(idc3), Main$MODE2)), ]
cut3 <- Main[unique(grep(paste(idc3), Main$MODE3)), ]

  column0|column1|column2|column3|MODE1|MODE2|MODE3
      53 |  26   |   9   |  153  | 23  | 34  |  85
      33 |  66   |   91  |  693  | 95  | 23  |  74
      37 |  67   |   97  |  693  | 34  | 86  |  24

如果我想要剩余的数据集怎么办

column0|column1|column2|column3|MODE|MODE2|MODE3
     4 |  83   |   23  |   863 | 85 | 86  |  45        
     6 |  87   |   27  |   863 | 47 | 56  |  52
    57 |  27   |   9   |   153 | 78 | 38  |  64

有没有办法做到这一点?谢谢

【问题讨论】:

  • 我不清楚这与dplyr 有什么关系...您的数据是否有id 列?如果您有一些名为id 的唯一行标识符,那么您的remainder = Main[!Main$id %in% c(cut$id, cut2$id, cut3$id), ]
  • 我相信比正则表达式更合适的方法是Reduce("|", lapply(Main[c("MODE1", "MODE2", "MODE3")], "%in%", c(23, 24))) 来检查每一行是否有任何带有 23 或 24 的“MODE_”列。如果你否定 (!) 这个,你'会得到你想要的第二个结果。
  • 谢谢 Alexis_laz 我会试试这个
  • 感谢格雷戈的帮助

标签: r dplyr plyr


【解决方案1】:

您可以使用一个函数调用创建索引,而不是创建三个单独的剪切。然后,您将能够根据需要选择匹配的列或相反的列:

idc3 = c(23,24)
indx <- as.logical(rowSums(sapply(df[,5:7], `%in%`, idc3)))
df[indx,]
#   column0 column1 column2 column3 MODE1 MODE2 MODE3
# 2      53      26       9     153    23    34    85
# 3      33      66      91     693    95    23    74
# 6      37      67      97     693    34    86    24
df[!indx,]
#   column0 column1 column2 column3 MODE1 MODE2 MODE3
# 1       4      83      23     863    85    86    45
# 4       6      87      27     863    47    56    52
# 5      57      27       9     153    78    38    64

【讨论】:

    猜你喜欢
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2015-06-20
    • 2016-02-27
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多