【问题标题】:extracting data using dplyr使用 dplyr 提取数据
【发布时间】:2015-03-22 05:04:43
【问题描述】:

假设我有以下数据

set.seed(123)

a <- c(rep(1,30),rep(2,30))
b <- rep(1:30)
c <- sample(20:60, 60, replace = T)
data <- data.frame(a,b,c)
data

现在我想提取数据:

对于a 的每个唯一值,提取/匹配b 值相同且c 值在+-5 范围内的数据

因此应产生所需的输出:

【问题讨论】:

  • 我想你在这里漏了一个字
  • 我不确定想要的输出是什么,但您在寻找data %&gt;% group_by(a) %&gt;% filter(abs(b - c) &lt;= 5)吗?
  • 所以这里a等于1或2。其中a=1,评估所有a=2的情况,提取使得b值相同,c值在+-5以内限制
  • 请使用set.seed 以使您的问题可重现并提供所需的输出
  • 使用与此类似的东西:data2 % group_by(a) %>% filter(n_distinct(b)==1 & abs(c - c)

标签: r dplyr


【解决方案1】:

您想比较每个不同的b 组(因为它们在每个a 中都是唯一的),因此您应该按b 进行分组。也无法按a 分组并比较它们之间的,因此可能的解决方案是

data %>% 
  group_by(b) %>% 
  filter(abs(diff(c)) <= 5)

使用data.table 包,这将类似于

library(data.table)
setDT(data)[, .SD[abs(diff(c)) <= 5], b]

或者

data[, if (abs(diff(c)) <= 5) .SD, b]

或者

data[data[, abs(diff(c)) <= 5, b]$V1]

在基础 R 中,它会类似于

data[with(data, !!ave(c, b, FUN = function(x) abs(diff(x)) <= 5)), ]

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多