【问题标题】:remove repeated elements of a data.frame based on previous and next values in R根据 R 中的前一个值和下一个值删除 data.frame 的重复元素
【发布时间】:2013-02-19 15:09:51
【问题描述】:

首先,你好!这是我在这里的第一篇文章,我不得不承认我有点紧张

我有一个 data.frame,其中每个元素都是一式三份,并且有自己的值,这是一个示例

test <-data.frame (id = c("a", "a", "a" , "b", "b", "b"),
        val = c(1,100,300,1,2,3))  

我需要计算每个副本集中值之间的差异,如果第一个 val 与第二个或第二个与第三个之间的差异小于数字,则将其删除。

我尝试创建自己的小函数并将其与 ddply 一起使用,但到目前为止我没有成功

这是我想要做的:

f<-function(x) if(x[1,2]-x[2,2] < 60 || x[2,2]- x[3,2] < 60) NULL else (x)
ddply(test, .(id), f)

在这个例子中,我希望最后得到的是:

id    val
a    1
a    100
a    300

“b”被删除是因为 (1-2

相反,我收到各种错误消息或奇怪的 data.frames,看起来完全错误

我希望我已经足够清楚了。

提前致谢

MP

编辑:差异是绝对值

【问题讨论】:

  • 但是1-100不也是
  • 是的,对不起,我的意思是绝对值

标签: r function if-statement dataframe plyr


【解决方案1】:

您在 ddply 中使用的函数必须返回一个数据框(或者在本例中,当您希望从最终结果中删除该部分时):

ddply(
  test,
  .(id),
  function(df_part, min_diff) {
    # Using abs() because I assume you want absolute differences
    diffs <- abs(diff(df_part$val))
    if (any(diffs < min_diff)) {
      return()
    } else {
      return(df_part)
    }
  },
  min_diff=60
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2016-07-11
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多