【发布时间】:2017-06-20 06:52:36
【问题描述】:
从下面的数据框中,我需要获取唯一记录,特别是创建日期,其中列 p01、p02、p03 等于 100。因此,在生成的数据框中,我将获得 ids (3, 6,11,14,19,24,25,26,28 ...)
Id CREATION_DATE p01 p02 p31 combined_field 2 2016-06-01 18:38:20.081 100 0 NA p01_100 3 2016-06-01 19:25:54.733 100 0 NA p01_100 6 2016-06-02 02:10:01.696 0 100 不适用 p02_100 7 2016-06-02 02:36:05.958 100 0 NA p01_100 8 2016-06-02 02:36:35.263 100 0 NA p01_100 11 2016-06-02 16:14:48.259 100 0 NA p01_100 14 2016-06-02 21:30:46.163 0 100 不适用 p02_100 15 2016-06-02 22:45:30.451 100 0 NA p01_100 19 2016-06-04 04:19:51.653 100 0 NA p01_100 24 2016-06-06 00:04:39.383 0 100 不适用 p02_100 25 2016-06-06 09:02:14.595 100 0 NA p01_100 26 2016-06-06 09:43:00.552 0 100 不适用 p02_100 28 2016-06-07 09:06:43.859 0 100 不适用 p02_100 31 2016-06-07 21:16:00.166 100 0 不适用 p01_100 33 2016-06-08 10:47:14.24 100 0 NA p01_100 35 2016-06-09 09:40:26.429 100 0 NA p01_100 39 2016-06-09 23:08:28.582 0 100 不适用 p02_100 41 2016-06-13 05:31:34.209 0 100 不适用 p02_100 44 2016-06-13 21:38:16.356 100 0 NA p01_100 ...我尝试将 p01、p02、p03 组合成组合字段,以便我可以对它们进行分组。
required.data <- within(required.data, {
combined_field <- ifelse(p01 == 100, paste("p01_100"),
ifelse(p02 == 100, paste("p02_100"),
ifelse(lvs31 == 100, paste("p31_100"),"")))
})
我无法考虑对数据框进行切片并在 p01、p02、p03 中的每一个中选择最新的创建日期,其中它具有最后 100 个(或在下一行变为 0 之前)。
预期输出:
Id CREATION_DATE p01 p02 p31 combined_field 3 2016-06-01 19:25:54.733 100 0 NA p01_100 6 2016-06-02 02:10:01.696 0 100 不适用 p02_100 11 2016-06-02 16:14:48.259 100 0 NA p01_100 14 2016-06-02 21:30:46.163 0 100 不适用 p02_100 19 2016-06-04 04:19:51.653 100 0 NA p01_100 24 2016-06-06 00:04:39.383 0 100 不适用 p02_100 25 2016-06-06 09:02:14.595 100 0 NA p01_100 28 2016-06-07 09:06:43.859 0 100 不适用 p02_100 ...我试图在不计算 combine_field 的情况下获得所需的输出,但由于 R 是一种新语言,我无法理解它的语法,因此用尽了 Ideas。
【问题讨论】:
-
能否请您输入
dput的数据和示例预期输出? -
根据描述的逻辑和你要提取的行,不清楚。
-
@jeremycg 我认为基于 OP 的 cmets,欺骗链接可能不是他/她寻求的答案
-
@jeremycg,这个问题不是重复的。我已经编辑了问题以提供更清晰的信息。你能删除重复的标签吗?