【发布时间】:2017-03-11 20:25:06
【问题描述】:
我有一个data.table,需要对应该唯一的多个值进行一些清理——一个简化的示例应该会有所帮助:
> DT
id type
1: 1 A
2: 2 X
3: 3 X
4: 3 G
5: 3 NA
6: 4 D
7: 5 NA
我遇到的问题是同一 ID 的“类型”有多个值,或者:
> DT[id == 3]
id type
1: 3 X
2: 3 G
3: 3 NA
多个值的来源无关紧要,但我想以特定方式清除它:取 last 报告的值,除非它是 NA。所以清理应该导致每个 ID 有一行,在示例中看起来像:
> DTclean
id type
1: 1 A
2: 2 X
3: 3 G
4: 4 D
5: 5 NA
我目前的做法是把DT按type排序,这样所有的NA都在前,然后用duplicated——这个可以接受,但我觉得有更好的方法,另外,虽然不是很重要,但这并不总是采用最后报告的值——在上述情况下,它采用 X 而不是 G。
这是我目前的做法:
> setorder(DT, type)
> DTclean <- DT[!duplicated(id, fromLast = T)]
> DTclean
id type
1: 1 A
2: 2 X
3: 3 X
4: 4 D
5: 5 NA
任何想法/帮助将不胜感激!
【问题讨论】:
-
你的方式对我来说似乎很好。您能否以可重现的方式发布示例(例如,使用
dput)? -
另外,重新 NA 处理,这个问题看起来很像stackoverflow.com/q/40097041
-
@Frank -- 抱歉,为了他人的利益,添加了您非常合理的要求
标签: r duplicates data.table