我有一个充满数据的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循环,但它没有工作......
真诚地感谢
如果您有任何问题,请随时提出
答案 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()