如何从data.frame获取最新条目并将其存储在新数据帧

时间:2017-08-04 14:20:54

标签: r

我有一个充满数据的data.frame,参数数据重复,但我想使用存储的最新信息。

谢天谢地,我在文件中有一个索引,告诉我哪个副本是data.frame中的当前行。

我的问题的示例如下:

    A    B    C    D
1   1    2    3    1
2   1    2    2    2
3   3    4    2    2
4   3    4    1    3
5   2    3    2    1
6   2    1    1    1

一个小的解释... A和B列可以被认为是键,C列表示该键的值...列D表示测量的索引..但它不必从1开始...它可以从3,6开始,......任何整数。发生这种情况是因为数据不完整

所以最后输出应该是:

    A    B    C    D
2   1    2    2    2
4   3    4    1    3
5   2    3    2    1
6   2    1    1    1

你能帮我编写一个制作R程序的程序,或者指出正确的方向,即用他们最新的索引保存所有的键......

我尝试过使用for循环,但它没有工作......

真诚地感谢

如果您有任何问题,请随时提出

2 个答案:

答案 0 :(得分:2)

在基础R中使用duplicated和子集,您可以

dat[!duplicated(dat[,1:2], fromLast=TRUE),]
  A B C D
2 1 2 2 2
4 3 4 1 3
5 2 3 2 1
6 2 1 1 1

duplicated返回一个逻辑向量,指示是否已复制行(此处为前两列)。 fromLast参数从data.frame的底部启动此过程。

答案 1 :(得分:1)

您可以使用dplyr动词对数据group_by进行分组,然后对arrange进行排序。 do动词允许您在组级别操作。 tail抓住每组的最后一行......

library(dplyr)
df1 <- df %>%
          group_by(A,B) %>%
          arrange(D) %>%
          do(tail(.,1)) %>%
          ungroup()

感谢Frank's建议,您也可以使用slice

df1 <- df %>%
          group_by(A,B) %>%
          arrange(D) %>%
          slice(n()) %>%
          ungroup()