【问题标题】:delete row by subset按子集删除行
【发布时间】:2011-12-13 00:13:08
【问题描述】:

我有一个 data.frame,其中包含 2 列 dates=每个站的观测日期和 values=observation data

> head(dataset.a)

     dates      values
1 1976-01-01       7.5
2 1976-01-02        NA
3 1976-01-03        NA
4 1976-01-04        NA
5 1976-01-05        NA
6 1976-01-06      10.2
(...)

我必须将每一行乘以我已经从另一个 data.frame 获得的值:

> head(dataset.b)

     dates      values
1 1976-01-01      0.23
2 1976-01-02        NA
3 1976-01-03        NA
4 1976-01-04        NA
5 1976-01-05        NA
6 1976-01-06      1.23
(...)

两个数据集都包含公历,但是 dataset.a 包含 闰年(在 2 月增加了第 29 天),dataset.b 在 2 月总是有 28 天。我想在 dataset.a 中忽略 2 月的所有 29 天并进行乘法运算。

我应该能够使用这两个索引创建一个基本子集:

which(strftime(dataset.a[,1],"%d")!="29")
which(strftime(dataset.a[,1],"%m")!="02")

但是,一旦我添加了一个逻辑 AND,如果我有 YEAR-02-29,我在 data.frame 中的位置就会丢失,他返回给我两个索引组合为 TRUE 的行数。

我想这是一个非常基本的问题,但我迷路了。

【问题讨论】:

    标签: r


    【解决方案1】:

    尝试一个逻辑索引:

    idx <- strftime(ws.hb1.dataset[d,1],"%d")!="29" & strftime(ws.hb1.dataset[d,1],"%m")!="02"
    

    注意:我假设ws.hb1.dataset[d,1] 基本上是dataset.a[,1]

    然后你会得到一个TRUE TRUE ... TRUE FALSE TRUE TRUE .. 的向量,其中FALSE 与 29/Feb 一致。

    然后您可以通过 dataset.a[idx,] 获取非 29/2 月的日期。

    【讨论】:

    • 是的,我忘记编辑最后几行了,我现在已经更正了。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多